"Uncaught ImagickException: Invalid filename" 在某些 JPEG 文件上

"Uncaught ImagickException: Invalid filename" on some JPEG files

我的 Imagick 库似乎在大多数情况下都能正常工作,但当我尝试上传某些 JPEG 文件时抛出以下错误消息:

Fatal error: Uncaught ImagickException: Invalid filename provided in D:\xampp\htdocs\socialnetwork\dashboard.php:68 Stack trace: #0 D:\xampp\htdocs\socialnetwork\dashboard.php(68): Imagick->__construct('') #1 {main} thrown in D:\xampp\htdocs\socialnetwork\dashboard.php on line 68

我找不到似乎影响此结果的共同因素。它可以发生在任何位深度,但似乎确实存在具有更高分辨率文件的模式。重命名文件也没有区别。我完全不知所措!

作为指示,这里有一些示例文件名:

// Working

'10899370_774171245990712_1020727574_n.jpg'
'28062008013.jpg'
'800px-Flag_of_the_United_Kingdom.svg.png'

// Not working

'DSC00806.jpg'
'daf.jpg'
'10899370_774171245990712_1020727574_q.jpg'

我的来源PHP如下:

<?php if (isset($_FILES["image_upload"]["name"])) { 

    $imagick = new Imagick($_FILES["image_upload"]["tmp_name"]);
    $imagick->resizeImage('400', '0', IMagick::FILTER_POINT, '1');
    $hash = md5( rand(0,1000) );
    $imagick->setImageFormat ("jpeg");
    file_put_contents ('photos/'.$hash.'.jpg', $imagick);
    header('Location:dashboard.php');

} ?>

<form action="" method="post" enctype="multipart/form-data">
    <label>Upload image</label><input type="file" name="image_upload" id="image_upload">
    <input type="submit">
</form>

"Problems with higher resolution files and renaming the files makes no difference" 向我表明文件有问题。无效的文件名可能具有误导性。 直接使用 imagemagick,当图像转换过程在保存之前失败时,您可能会遇到类似的文件名错误。

我会直接在 Imagemagick 中尝试 运行 其中一个文件,看看您是否遇到其他错误,或者检查您的服务器日志以查看是否有更多详细信息。您也可以尝试将命令缩减为 simple/minimum 以查看是否是您的某个特定操作导致了问题。还对同一文件夹中的所有文件使用硬编码值。

$array=array();
echo "<pre>";
exec("convert DSC00806.jpg Output_test1.png 2>&1", $array); 
echo "<br>".print_r($array)."<br>";
echo "</pre>";

如果使用 V7,请将 convert 替换为 magic

所以事实证明 Imagick 踢出了无用的错误消息。问题是上传的文件大小超过了 php.ini.

中上传文件的最大允许大小

我不确定为什么我没有从服务器收到错误消息,但我们已经收到了。问题已解决!