Muszę zapisać obraz z adresu URL PHP na moim komputerze. Powiedzmy, że mam stronę http://example.com/image.phpz jednym obrazem „kwiatka”, niczym więcej. Jak mogę zapisać ten obraz z adresu URL pod nową nazwą (używając PHP)?
Jeśli kopiujesz dużą liczbę lub rozmiar plików, pamiętaj, że preferowane są metody CURL (jak drugi przykład w zaakceptowanej odpowiedzi ), ponieważ CURL zajmuje około jednej trzeciej czasu jak file_put_contentsitp.
Dzięki stary, twój kod pomoże mi rozwiązać problem. Ale czy możesz pomóc mi zautomatyzować skrypt. Mam na myśli to, że kiedy nowy obraz gif trafi na adres URL („ example.com/image.php ”), to nasz skrypt automatycznie pobierze nowy obraz i zapisze go w moim katalogu?
riad
32
A skąd wiesz, że nowy obraz „przyszedł”?
vartec,
2
Myślę, że riad oznacza użycie $_GETzmiennej zawierającej adres URL obrazu http://example.com/fetch-image.php?url=http://blabla.com/flower.jpg. W przypadku tego przykładu, można po prostu zadzwonić $_GET['url']w skrypcie PHP, tak: $ch = curl_init($_GET['url']);.
Mathias Bynens,
4
+1 za bycie jedyną odpowiedzią, jaką widziałem, która zawiera „b” dla flagi binarnej.
Will Morgan
34
@vartec: bo palił papierosa i miał duży uśmiech na twarzy :)
Strona zawiera animowany obraz gif. Plik jest przechowywany w folderze jako kwiat.gif. Ale jest pusty. Brak obrazu pokaż. Jakieś rozwiązanie?
riad
Włącz raportowanie błędów (E_ALL | E_STRICT) i sprawdź wartość zwracaną przez file_get_contents (), wtedy powinieneś otrzymać rozsądny komunikat o błędzie.
urlencode (' example.com/image.php' ) == 'http% 3A% 2F% 2Fexample.com% 2Fimage.php', oczywiście nie to, czego chcesz. Plik jest również binarny, należy ustawić odpowiednią flagę.
vartec,
4
Trochę starego wątku ... ale nie zapomnij uprawnień do plików dla katalogu, w którym zapisujesz. Po prostu zmarnowałem dziesięć minut, zapominając o oczywistości.
Squiggs.
29
Proszę, przykład zapisuje zdalny obraz do image.jpg.
function save_image($inPath,$outPath){//Download images from remote server
$in= fopen($inPath,"rb");
$out= fopen($outPath,"wb");while($chunk = fread($in,8192)){
fwrite($out, $chunk,8192);}
fclose($in);
fclose($out);}
save_image('http://www.someimagesite.com/img.jpg','image.jpg');
dzięki zuul, naprawdę i Stoe naprawdę okazały się pomocne po dalszych poszukiwaniach lub spędzeniu czasu
Rakesh Sharma
genialne - to bardzo pomogło! Należy również zauważyć w odpowiedzi Varteców
Nick
10
Nie udało mi się uruchomić żadnego z innych rozwiązań, ale mogłem użyć wget:
$tempDir ='/download/file/here';
$finalDir ='/keep/file/here';
$imageUrl ='http://www.example.com/image.jpg';exec("cd $tempDir && wget --quiet $imageUrl");if(!file_exists("$tempDir/image.jpg")){thrownewException('Failed while trying to download image');}if(rename("$tempDir/image.jpg","$finalDir/new-image-name.jpg")===false){thrownewException('Failed while trying to move image file from temp dir to final dir');}
Utwórz folder o nazwie obrazy znajdujący się na ścieżce, na której planujesz umieścić skrypt php, który zamierzasz utworzyć. Upewnij się, że ma prawa zapisu dla wszystkich, w przeciwnym razie skrypty nie będą działać (nie będzie można przesyłać plików do katalogu).
zainstaluj wkhtmltoimage na swoim serwerze, a następnie użyj mojego pakietu packagist.org/packages/tohidhabiby/htmltoimage do wygenerowania obrazu z adresu docelowego.
file_put_contents
itp.Odpowiedzi:
Jeśli
allow_url_fopen
ustawiłeśtrue
:W przeciwnym razie użyj cURL :
źródło
$_GET
zmiennej zawierającej adres URL obrazuhttp://example.com/fetch-image.php?url=http://blabla.com/flower.jpg
. W przypadku tego przykładu, można po prostu zadzwonić$_GET['url']
w skrypcie PHP, tak:$ch = curl_init($_GET['url']);
.źródło
allow_url_fopen
).źródło
Proszę, przykład zapisuje zdalny obraz do image.jpg.
źródło
Odpowiedź Vartec z cURL nie działała dla mnie. Tak, z niewielką poprawą wynikającą z mojego konkretnego problemu.
na przykład,
Gdy na serwerze jest przekierowanie (na przykład podczas próby zapisania obrazu profilu na Facebooku), potrzebujesz następującego zestawu opcji:
Pełne rozwiązanie staje się:
źródło
Nie udało mi się uruchomić żadnego z innych rozwiązań, ale mogłem użyć wget:
źródło
Zobacz
file()
podręcznik PHP :źródło
źródło
Utwórz folder o nazwie obrazy znajdujący się na ścieżce, na której planujesz umieścić skrypt php, który zamierzasz utworzyć. Upewnij się, że ma prawa zapisu dla wszystkich, w przeciwnym razie skrypty nie będą działać (nie będzie można przesyłać plików do katalogu).
źródło
źródło
zainstaluj wkhtmltoimage na swoim serwerze, a następnie użyj mojego pakietu packagist.org/packages/tohidhabiby/htmltoimage do wygenerowania obrazu z adresu docelowego.
źródło