2016-10-15 3 views
0

Я пытаюсь загрузить удаленные изображения (из более чем одного сайта), но любой из этих кодов работалПопытка загрузить удаленный файл с PHP

allow_url_fopen включен, но это код вернет 0 байт

$url = 'http://example.com/image.php'; 
$img = 'teste.jpg'; 
file_put_contents($img, file_get_contents($url)); 

или

copy('http://example.com/image.php', 'teste.jpg'); 

Когда я использую локон (который включен на хост) появляется эта ошибка:

Ошибка: запрошенный ресурс не может быть загружен. Libcurl возвратил ошибку: Пусто ответ от сервера

код завиток:

$ch = curl_init('http://example.com/image.php'); 
$fp = fopen('teste,jpg, 'wb'); 
curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_exec($ch); 
curl_close($ch); 
fclose($fp); 

Edit: Попробовал следующий завиток неавтоматического тоже:

$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); 

сайт размещен 000webhost, и после попытки весь мой день с разными кодами мне пришлось использовать прокси для доступа к моему сайту, потому что он блокировал меня

Редактировать 2:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,"h.mhcdn.net/store/manga/10738/thumb_cover.jpg?v=1476422230"); 
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)'); 
//die("here1"); 
$data = curl_exec($ch); 
die("here2"); 
file_put_contents("test.jpg", $data); 
die("here3"); 
//curl_setopt($ch, CURLOPT_FILE, "test.jpg"); 

Пробный код выше, но он не достигнет «die» («here2»); »(страница не будет загружать) только штамп (« here1 »);

Edit 3:

$url = "http://h.mhcdn.net/store/manga/10738/thumb_cover.jpg?v=1476422230"; 
     $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)'); 
     //die("here1"); 
     $data = curl_exec($ch); 
     file_put_contents("local_file.jpg", $data); 
     die("here2"); 

Не можете достичь здесь 2, только here1

Edit 4: вот проблема: порт 80 заблокирован для исходящих соединений на 000web: https://www.habschned.com/000webhost-com-blocking-port-80-for-outbound-traffic-no-more-curl/

ответ

0

I предположим, это довольно очевидно, но попытался ли открыть URL-адрес в своем браузере? Вы видите изображение?

Если ответ на вышеуказанный вопрос «ДА» (скорее всего), скорее всего удаленная сторона блокирует сценарии извлечения ресурса. Решение состоит в том, чтобы использовать cURL, эмулируя максимально возможное поведение обычного браузера с точки зрения заголовков HTTP.

Я бы начал с самых очевидных из них, которые являются CURLOPT_USERAGENT и CURLOPT_USERAGENT, устанавливают их в значения, которые они ожидают, и вы должны быть в порядке. Более сложные средства контроля доступа включают файлы cookie и сеансы, что является более сложным, потому что вам нужно будет найти ссылочную страницу, сохранить файл cookie и отправить его при извлечении ресурса.

UPDATE:

В то время как это верно, это не проблема Аскер был, этот простой скрипт должен работать как есть:

$url = "http://h.mhcdn.net/store/manga/10738/thumb_cover.jpg?v=1476422230"; 
$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)'); 
$data = curl_exec($ch); 
file_put_contents("local_file.jpg", $data); 
+0

Да, я попытался открыть URL , и попытался с различными удаленными изображениями.тоже пробовал следующий код: – user3666414

+0

'$ 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 (совместимо; MSIE 7.0; Windows NT 5.1)'); curl_setopt ($ ch, CURLOPT_FILE, $ lfile); ' – user3666414

+0

Если вы можете предоставить образец URL-адреса, я могу попробовать его – Johnny