【问题标题】:"Uncaught ImagickException: Invalid filename" on some JPEG files某些 JPEG 文件上的“未捕获的 ImagickException:文件名无效”
【发布时间】:2019-08-03 08:48:55
【问题描述】:

我的 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>

【问题讨论】:

  • 您也可以发布其中一个文件名。
  • 这似乎并没有太大区别,因此我将其省略了,但我会添加它。
  • 按照您创建哈希的方式,您很快就会遇到冲突。你为什么不散列图像本身,或者创建一个 GUID?
  • 哈希可能不会因为这个原因而被削减,但这当然不是这里的问题。即使“照片/”为空,我仍然会收到错误消息。

标签: php imagemagick imagick


【解决方案1】:

“更高分辨率文件的问题和重命名文件没有区别”向我表明这是文件的问题。无效的文件名可能具有误导性。 直接使用 imagemagick,当图像转换过程在保存之前失败时,您可能会收到与文件名类似的错误。

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

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

如果使用 V7,请用魔法替换 convert

【讨论】:

  • 我已经成功地在 ImageMagick 中打开了问题文件,并简化了我的命令但没有成功......但恐怕我不太明白你的其余说明......
  • 这很好,因此您已经排除了文件的问题。我不知道那是什么问题。发布的代码应显示 Imagemagick 捕获的任何错误。检查代码所在文件夹中的日志文件可能会突出显示 Imagick 未显示的任何问题/错误。
  • 令人讨厌的是,日志文件显示完全相同的错误。不过感谢您的帮助!
【解决方案2】:

事实证明,Imagick 正在排除无用的错误消息。问题是上传的文件大小超过了 php.ini 中上传文件的最大允许大小。

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

【讨论】:

    猜你喜欢
    • 2014-09-09
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多