getimagesize()在某些图像上返回false

时间:2009-11-09 21:00:05

标签: php image validation upload getimagesize

我正在运行getimagesize()以确定上传的文件是否是有效图片以及它的MIME类型。我的webapp用户报告了他的一些图片,上传后出现“无效文件类型”错误。所以我让他给我发一些检查。

错误字符串本身没有意义,因为它只是函数失败时返回的通用文本(返回FALSE)。我尝试增加PHP的内存限制但没有成功。此外,日志不会显示任何异常。文件有问题还是其他问题?是否有更好的方法来进行此操作?

我接受getimagesize()接受的任何文件(意味着它有宽度/高度),我只是检查它不会返回FALSE(虽然我的真实范围是jpg | JPEG | PNG | GIF | BMP | TIF | TIFF)。服务器正在运行PHP / 5.2.6-1 + lenny3。我再说一遍,这只发生在链接的图像和同一系列的其他一些图像中,所以我更倾向于认为它与Lizard暗示的内容有关。

在到达$_FILES之前,

getimagesize($_FILES['Filedata']['tmp_name'])似乎是空的,因此永远不会检查该文件。我必须弄清楚为什么这些文件不会像其他文件一样提交(对于PHP来说太大了?可能有任何想法?)。

5 个答案:

答案 0 :(得分:4)

除非您提供更多信息,否则我无法提供更多帮助。以下代码:

$file = "http://img27.imageshack.us/img27/9159/dsc00799e.jpg";
$info = getimagesize($file);

echo "<pre>" . print_r($info,true) . "</pre>";

(其中$ file等于问题中给出的图像的位置),输出:

Array
(
    [0] => 2736
    [1] => 3648
    [2] => 2
    [3] => width="2736" height="3648"
    [bits] => 8
    [channels] => 3
    [mime] => image/jpeg
)

这似乎没问题。我在你的支票的其他地方假设错误了?

答案 1 :(得分:2)

环顾四周后,我发现了insightful answer regarding PHP's upload limits。我将它与我已经知道的相结合,最后使用我的.htaccess中的以下代码(限制上传到5MB)使其工作:

php_value upload_max_filesize 5M
php_value post_max_size 8M
php_value max_input_time 1800
LimitRequestBody 0

底线是:问题不在PHP的getimagesize()函数中,而是由于Apache和PHP中的文件大小限制,图像从未上传到服务器。谢谢所有回答和评论的人,如果没有你的帮助,弄清楚它会更加痛苦!

答案 2 :(得分:0)

我不确定这是否是您正在寻找的答案,但我知道我的PHP功能和图像在任何维度都超过3000像素的问题。

希望有所帮助!

答案 3 :(得分:0)

你说

  

$ _ FILES似乎是空的

您是否检查过上传错误? - 当上传失败时,PHP设置文件数组的error元素。有关可能的错误代码,请参阅PHP文档的File Upload section

答案 4 :(得分:0)

我遇到了同样的问题,我使用了与img标签中使用的完全相同的文件引用:

  $filename = "/images/logo.jpg"; 

  $size = getimagesize($filename); // <== this fails

  <img src="<?echo $filename ?>" />  // <== this works

当我删除文件名中的第一个斜杠并再次尝试时,它起作用了:

  $size = getimagesize("/images/logo.jpg"); // <== this fails

  $size = getimagesize("images/logo.jpg"); // <== this works!

我希望它也适用于其他人。