我正在运行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来说太大了?可能有任何想法?)。
答案 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)
答案 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!
我希望它也适用于其他人。