Szukam prostego sposobu na importowanie / kopiowanie obrazów ze zdalnego serwera do lokalnego folderu za pomocą PHP. Nie mam dostępu FTP do serwera, ale wszystkie zdalne obrazy są dostępne przez HTTP (tj. Http://www.mydomain.com/myimage.jpg ).
Przykładowe zastosowanie: użytkownik chce dodać zdjęcie do swojego profilu. Obraz już istnieje w sieci, a użytkownik podaje bezpośredni adres URL. Nie chcę hotlinkować obrazu, ale importować i udostępniać z mojej domeny.
Odpowiedzi:
Jeśli masz PHP5 i włączone opakowanie strumienia HTTP na swoim serwerze, bardzo łatwo jest skopiować je do pliku lokalnego:
copy('http://somedomain.com/file.jpeg', '/tmp/file.jpeg');
To zajmie się wszelkimi potrzebnymi rurociągami itp. Jeśli chcesz podać niektóre parametry HTTP, możesz podać trzeci parametr „kontekst strumienia”.
źródło
http://desmond.imageshack.us/Himg100/scaled.php?server=100&filename=desertoh.jpg&res=crop
?posługiwać się
$imageString = file_get_contents("http://example.com/image.jpg"); $save = file_put_contents('Image/saveto/image.jpg',$imageString);
źródło
PHP ma wbudowaną funkcję file_get_contents (), która wczytuje zawartość pliku do łańcucha.
Jeśli chcesz przechowywać plik w bazie danych, po prostu użyj zmiennej $ content i nie zapisuj pliku na dysku.<?php //Get the file $content = file_get_contents("http://example.com/image.jpg");
//Store in the filesystem. $fp = fopen("/location/to/save/image.jpg", "w"); fwrite($fp, $content); fclose($fp); ?>
źródło
Masz około czterech możliwości:
Pliki zdalne . Należy
allow_url_fopen
to włączyć w php.ini, ale jest to najłatwiejsza metoda.Alternatywnie możesz użyć cURL, jeśli Twoja instalacja PHP go obsługuje. Jest nawet przykład .
A jeśli naprawdę chcesz to zrobić ręcznie, użyj modułu HTTP .
Nie próbuj nawet używać bezpośrednio gniazd .
źródło
Oto najbardziej podstawowy sposób:
$url = "http://other-site/image.png"; $dir = "/my/local/dir/"; $rfile = fopen($url, "r"); $lfile = fopen($dir . basename($url), "w"); while(!feof($url)) fwrite($lfile, fread($rfile, 1), 1); fclose($rfile); fclose($lfile);
Ale jeśli robisz to dużo, dużo (lub twój host blokuje dostęp do plików do systemów zdalnych), rozważ użycie CURL, który jest bardziej wydajny, nieco szybszy i dostępny na bardziej współdzielonych hostach.
Możesz również sfałszować klienta użytkownika, aby wyglądał jak komputer stacjonarny, a nie bot!
$url = "http://other-site/image.png"; $dir = "/my/local/dir/"; $lfile = fopen($dir . basename($url), "w"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'); curl_setopt($ch, CURLOPT_FILE, $lfile); fclose($lfile); curl_close($ch);
W obu przypadkach możesz chcieć przekazać to przez GD, aby upewnić się, że to naprawdę jest obraz.
źródło
curl_exec($ch)
wcześniejcurl_close($ch)
ifclose($ch)
powinien być umieszczony raczej na końcu niż wcześniejcurl_close($ch)
, co oznacza zamknięcie pliku, zanim nic nie zostanie zapisane w pliku, dlatego otrzymasz tylko pusty plik.Jest to niezwykle proste przy użyciu file_get_contents . Po prostu podaj adres URL jako pierwszy parametr.
źródło
stwórz folder i nazwij go wrogiem przykład pobierz otwarty notes i wstaw ten kod
zmień tylko adres http://www.google.com/aa.zip na swój plik i zapisz go na przykład w m.php
chamod plik php na 666, a folder pobierz na 777
<?php define('BUFSIZ', 4095); $url = 'http://www.google.com/aa.zip'; $rfile = fopen($url, 'r'); $lfile = fopen(basename($url), 'w'); while(!feof($rfile)) fwrite($lfile, fread($rfile, BUFSIZ), BUFSIZ); fclose($rfile); fclose($lfile); ?>
na koniec z przeglądarki wprowadź adres URL http://www.example.com/download/m.php
w folderze pobierania zobaczysz plik pobrany z innego serwera
dzięki
źródło
Użyj żądania GET, aby pobrać obraz i zapisać go w katalogu dostępnym w sieci na serwerze.
Ponieważ używasz PHP, możesz użyć
curl
do pobierania plików z innego serwera.źródło
Ponieważ oznaczyłeś pytanie jako „php”, zakładam, że masz uruchomione php na serwerze. Najlepiej jest, jeśli kontrolujesz swój własny serwer WWW, a następnie skompiluj cURL do php. Umożliwi to serwerowi WWW wysyłanie żądań do innych serwerów WWW. Może to być dość niebezpieczne z punktu widzenia bezpieczeństwa, więc większość podstawowych dostawców usług hostingowych nie ma włączonej tej opcji.
Oto strona podręcznika php o używaniu cURL . W komentarzach można znaleźć przykład pobierania i plik obrazu.
Jeśli nie chcesz używać libcurl, możesz coś zakodować za pomocą fsockopen. Jest to wbudowane w php (ale może być wyłączone na twoim hoście) i może bezpośrednio czytać i zapisywać w gniazdach. Zobacz Przykłady na stronie podręcznika fsockopen .
źródło
Dla tych, którzy chcą zachować oryginalną nazwę pliku i rozszerzenie
$origin = 'http://example.com/image.jpg'; $filename = pathinfo($origin, PATHINFO_FILENAME); $ext = pathinfo($origin, PATHINFO_EXTENSION); $dest = 'myfolder/' . $filename . '.' . $ext; copy($origin, $dest);
źródło
Ta odpowiedź pomogła mi pobrać obraz z serwera na klienta.
<a download="original_file.jpg" href="file/path.jpg"> <img src="file/path.jpg" class="img-responsive" width="600" /> </a>
źródło