2

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

我用谷歌搜索并检查了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 中更改的东西

4

4 回答 4

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
?>
于 2012-12-04T10:27:04.093 回答
2

如果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)

简单演示

于 2012-12-04T10:51:51.220 回答
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);
于 2012-12-04T10:21:52.793 回答
1

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

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

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

于 2012-12-04T10:26:52.203 回答