PHP - getimagesize()重定向不起作用

时间:2012-12-04 10:08:18

标签: php getimagesize

问题:getimagesize()不适用于某些网址,尤其是重定向的网址。

我用Google搜索并检查了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给了我一个问题。我也尝试了以下(在我的服务器上),这个 工作:

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

中改变的东西

4 个答案:

答案 0 :(得分:3)

您的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
?>

答案 1 :(得分:2)

如果file_get_contents有效,那么肯定fopen可以正常工作

由于您有权限问题,Curl可能是最佳选择,但您也可以使用FastImage ..来阅读图片标题并获取信息而不是 < em>必须在本地保存整个文件

示例

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

Simple Demo

答案 2 :(得分:1)

希望它对你有所帮助。由于该链接上有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);

答案 3 :(得分:1)

我有两个我能想到的选择:

1)将文件存入您的计算机(使用cURL或file_get_contents)并在那里应用您想要的任何处理

2)调用header(cURL库),检查status = 200,如果是,直接在那里应用该函数,如果其他http状态代码则遵循重定向或忽略该文件。