PHP:使用ImageMagick的convert命令创建空图像

3

我有一个脚本,它的作用是将图像转换为 .jpg 格式。这是实现该功能的代码:

$uploadDir = $_SERVER['DOCUMENT_ROOT'] . "/blogimages/";
$tempFile = ereg_replace("'", "_", basename($_FILES['newsImg']['name']));
$uploadFile = $uploadDir . $tempFile;
move_uploaded_file($_FILES['newsImg']['tmp_name'], $uploadFile);
$newPic = $uploadDir . $blogID . ".jpg";
if(file_exists($newPic)){
unlink($newPic);
}
$convertString = "$IM -strip $uploadFile $newPic";
echo "<!-- $convertString -->";
exec($convertString);

可以看到,我把最终字符串放在了HTML注释中,这样我就可以看到正在执行的内容。发生的情况是创建了转换后的图像,但它是一个0字节的图像。因此实际上没有将任何数据写入文件。为了确保convert正常工作,我从html注释中复制并粘贴了convert字符串到命令行中,它完全正常工作。它似乎只在PHP exec中出现问题。你有什么想法吗?


2
$IM是什么?你对$_FILES ['newsImg'] ['tmp_name']进行过错误检查吗? - Jose Vega
使用PHP imagick扩展将使调试错误更容易(因为问题将使用常规的PHP错误检查器报告),并且具有更好的性能(因为它不必启动新进程来转换图像)。它不能直接解决您的问题,但调试可能会有所帮助。 - El Yobo
很遗憾,我无法添加任何php扩展。这是共享主机,因此我无法访问php.ini。 - LoneWolfPR
2个回答

2
我想也许在尝试执行命令时上传文件的句柄还没有关闭?这样,Imagemagick将看到一个不完整的文件。
查看代码,我不明白它怎么会发生,特别是因为文件被移动了,但这可以解释这种行为。

1

首先对 $_FILES['newsImg']['name'] 进行一些错误检查,然后确保 move_uploaded_file(...) 成功。


我已经采取了很多步骤。$IM只是指向imagemagick的路径。我知道这没问题,否则它甚至不会创建空文件。我也确定move_uploaded_file成功了。我已经检查过文件夹了。我甚至将其拆分为两个步骤。我让脚本只处理上传。然后,当它完成时。我运行另一个处理转换的脚本,以便我知道它正在使用完全上传的图像工作。我得到相同的空白图像。我只是想知道PHP中是否有一些奇怪的设置阻止它工作。 - LoneWolfPR
权限问题?您将文件移动到的文件夹是否对运行exec()的用户具有写入权限? - Jose Vega
是的。已经双重检查了所有权限。 - LoneWolfPR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接