Проблема: 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 затем следует за перенаправлением или игнорирует файл.