"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.
中上传文件的最大允许大小
我不确定为什么我没有从服务器收到错误消息,但我们已经收到了。问题已解决!
我的 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.
中上传文件的最大允许大小我不确定为什么我没有从服务器收到错误消息,但我们已经收到了。问题已解决!