3

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

错误字符串本身没有意义,因为它只是我在函数失败时编写的通用文本(返回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 来说太大了?有什么想法吗?)。

4

5 回答 5

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
)

这似乎没问题。我假设您的支票中的其他地方有错误?

于 2009-11-09T21:11:32.667 回答
3

在环顾四周之后,我发现了这个关于 PHP 上传限制的有见地的答案。我将它与我已经知道的相结合,最后在我的 .htaccess 中使用以下代码使其工作(将上传限制为 5MB):

php_value upload_max_filesize 5M
php_value post_max_size 8M
php_value max_input_time 1800
限制请求体 0

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

于 2009-11-10T10:55:18.817 回答
0

我不确定这是否是您要寻找的答案,但我知道我的 php 函数和图像在任何维度上都超过 3000 像素时存在问题。

希望有帮助!

于 2009-11-09T21:10:12.543 回答
0

你说

$_FILES 似乎是空的

你检查上传错误了吗?- 当上传失败时,PHP 设置error文件数组的元素。有关可能的不同错误代码,请参阅 PHP 文档的文件上传部分

于 2009-11-10T11:00:49.110 回答
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!

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

于 2015-07-19T20:10:01.500 回答