Intereting Posts

PHP – getimagesize () перенаправление не работает

Проблема: getimagesize () не работает для некоторых URL-адресов, особенно тех, которые перенаправляются.

Я googled вокруг и проверил stackoverflow, но безрезультатно.

Вот что я вижу на своей локальной машине:

var_dump(getimagesize('http://gan.doubleclick.net/gan_impression?lid=41000000015155731&pubid=21000000000506299&lsrc=17')); > Array ( [0] => 120 [1] => 90 [2] => 2 [3] => width="120" height="90" [bits] => 8 [channels] => 3 [mime] => image/jpeg ) 

и на моем сервере:

 var_dump(getimagesize('http://gan.doubleclick.net/gan_impression?lid=41000000015155731&pubid=21000000000506299&lsrc=17')); > bool(false) 

Я пробовал другие изображения и URL-адреса, и они работают нормально. Именно этот URL-адрес дает мне проблему. Я также попробовал следующее (на моем сервере), и это работает:

 echo strlen(file_get_contents('http://gan.doubleclick.net/gan_impression?lid=41000000015155731&pubid=21000000000506299&lsrc=17')); > 4829 // This number means it works 

В журнале ошибок ничего нет, и никаких других подсказок я не могу сказать. Я предполагаю, что это то, что нужно изменить в php.ini

Если file_get_contents работает, то определенно fopen будет работать

Curl был бы лучшим вариантом, так как у вас есть проблема с разрешением, но вы также можете использовать FastImage .. для чтения заголовков изображений и получения информации вместо того , чтобы сохранять весь файл локально

пример

 $img = new FastImage("http://gan.doubleclick.net/gan_impression?lid=41000000015155731&pubid=21000000000506299&lsrc=17"); var_dump($img->getSize(),$img->getType()); 

Вывод

 array (size=2) 0 => int 120 1 => int 90 string 'jpeg' (length=4) 

Простая демонстрация

Может быть, allow_url_fopen отключен в вашем файле PHP.ini ? Вы можете отредактировать файл PHP.ini или вместо него использовать cUrl .

Пример:

 <?php //Download content $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, 'http://gan.doubleclick.net/gan_impression?lid=41000000015155731&pubid=21000000000506299&lsrc=17'); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); $file_contents = curl_exec($ch); curl_close($ch); file_put_contents('file', $file_contents); //Put content in ./file var_dump(getimagesize('file')); //Get image size unlink('file'); //Remove the file ?> 

надеюсь, это поможет вам. поскольку в этой ссылке есть заголовок 302, к сожалению, getimagesize не распознает этот заголовок. вы можете получить к вам сервер, чтобы обеспечить работу getimagesize!

  // fetch content to local $content = file_get_contents($file_path); $fetch_from_remote = file_put_contents($to_local_path, $content); if($fetch_from_flag === FALSE){ // error } // defining vars to resize photo $file_info = getimagesize($to_local_path); 

У вас есть 2 варианта, о которых я могу думать:

1) Загрузите файл на свой компьютер (используйте cURL или file_get_contents) и примените туда любую требуемую обработку

2) Сделайте вызов для заголовков (библиотека cURL), проверьте, если статус = 200, если да .. применяйте эту функцию непосредственно там, если другой код состояния http затем следует за перенаправлением или игнорирует файл.