PHP:imagemagick使用convert创建空图像

PHP:imagemagick使用convert创建空图像,php,imagemagick,Php,Imagemagick,我有一个脚本,它应该拍摄一幅图像并将其转换为.jpg。这是使其发生的代码: $uploadDir = $_SERVER['DOCUMENT_ROOT'] . "/blogimages/"; $tempFile = ereg_replace("'", "_", basename($_FILES['newsImg']['name'])); $uploadFile = $uploadDir . $tempFile; move_uploaded_file($_FILES['newsImg']['tmp_

我有一个脚本,它应该拍摄一幅图像并将其转换为.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);
$uploadDir=$\u服务器['DOCUMENT\u ROOT']。“/blogimages/”;
$tempFile=ereg_replace(“'”,“uu”),basename($_FILES['newsImg']['name']);
$uploadFile=$uploadDir$临时文件;
移动上传的文件($上传文件['newsImg']['tmp\u name'],$uploadFile);
$newPic=$uploadDir$blogID。“.jpg”;
如果(文件_存在($newPic)){
取消链接($newPic);
}
$convertString=“$IM-strip$uploadFile$newPic”;
回声“;
exec($convertString);

可以看到,我将最后一个字符串放在HTML注释中,这样我就可以看到正在执行的内容。所发生的情况是,已创建转换的映像,但它是一个0字节的映像。因此,实际上没有数据写入该文件。为了确保convert的工作方式与正常工作方式相同,我应该将转换字符串从html注释复制并粘贴到命令行中,并且工作正常。它似乎只是在PHP exec中出现了问题。想知道为什么会这样吗?

首先对
$\u文件['newsImg']['name']
执行一些错误检查,然后确保
移动上传的文件(…)
成功

我在想,当您尝试执行命令时,上载文件句柄可能还没有关闭?这样Imagemagick就会看到一个不完整的文件


查看代码,我看不出它是如何发生的,特别是因为文件被移动了,但它可以解释这种行为。

什么是$IM,您是否对$_文件['newsImg']['tmp_name']]进行了错误检查?使用PHP imagick扩展将更容易调试错误(因为问题会使用普通的PHP错误检查器报告)和更好的性能(因为它不必启动新的进程来转换图像)它不能直接解决你的问题,但是调试可能会有帮助。不幸的是,我不能给PHP添加任何扩展。它是共享主机,所以我无法访问PHP.ini。我已经采取了很多步骤。$IM只是IMAGEMGEKE的路径。我知道这很好,否则它甚至不会创建空白文件。我也肯定MoviiUro。aded_文件成功。我检查了文件夹。我甚至将其分为两个步骤。我让这个脚本简单地处理上传。然后,当它完成时。我运行了另一个脚本来处理转换,我知道它正在处理一个完全上传的图像。我得到了相同的空白图像。我只是想知道PHP中是否有一些奇怪的设置是k是否将其从工作中删除。权限可能?您要移动文件的文件夹是否对运行exec()的用户具有写入权限?是。双击所有权限。