繁体   English   中英

imagemagick convert命令在php脚本中无法正常运行,但可以从命令行运行

[英]imagemagick convert command not working correctly in php script but does work from command line

进行php转换的系统调用已工作了多年,但今年年初退出了工作。 如果从命令行使用Putty发出命令,则我正在使用的所有命令都可以正常工作。

我创建的用于调试的测试PHP文件是

<?  
$string = "convert  -verbose -resize 200x200  \"startline/main_menu.png\" \"image/temp222_main_menu.png\" ";
passthru($string);
?>

<IMG SRC='image/temp222_main_menu.png '  alt='main_menu'>

未创建输出文件。 我得到这个回应

startline/main_menu.png PNG 600x1024 600x1024+0+0 8-bit DirectClass 92.1KB 0.020u 0:00.020

如果我用这个替换我的字符串

$string = "convert  -version -resize 200x200  \"startline/main_menu.png\" \"image/temp222_main_menu.png\" ";

输出文件已创建但未调整大小。

我得到这个回应:

Version: ImageMagick 6.6.0-4 2012-04-26 Q16 http://www.imagemagick.org Copyright: Copyright (C) 1999-2010 ImageMagick Studio LLC Features: OpenMP

有趣的是,这从2008年一直持续到今年年初。 可能不确定,当时我切换到PHP5和新服务器。 这是在1and1.com上运行

1and1的技术支持人员说,问题在于档案不存在,因此结案。 那不是很有帮助。

我想知道是否需要在php.ini文件中放入某些内容。


我也尝试过:exec(“ / usr / bin / convert -resize 200x200 image / temp222_main_menu.png”); ?>

请注意。 我输入了详细信息,以便可以确定我实际上正在运行该程序,并且返回了一些输出。 它还表明它正在加载正确的文件。 这也是为什么我使用passthru而不是exec或system的原因。 这只是一个测试脚本。 我在破坏之前使用的脚本没有使用passthru,但是有太多要发布的内容。 关键是执行的字符串在php中不起作用,但在命令行中起作用,因此它是正确的。

您应该尝试这些步骤来调试问题。

首先,通过提供所有文件名和命令的完整路径来验证设置是否完全有效:

<?php  
exec("which convert");
?>

<?php  
exec("/path/to/convert  /path/to/a.png  -resize 200x200  /tmp/a200x200.png");
?>

(显然,您必须根据情况调整路径。)

然后,检查您的PHP正在运行的用户帐户是否甚至具有写入目标目录的特权:

<?php  
exec("pwd");
exec("touch $(pwd)/image/temp222_main_menu.png");
?>

我将您的代码更改为此,以使其完全起作用:

<?php  
exec("/usr/bin/convert -resize 200x200  image/temp222_main_menu.png");
?>

<IMG SRC='image/temp222_main_menu.png'  alt='main_menu'>

注意...

  1. ...我删除了-verbose部分(它仅在stderr startline/main_menu.png PNG 600x1024 600x1024+0+0 8-bit DirectClass 92.1KB 0.020u 0:00.020上生成附加行,这可能是convert命令的原因永远不会完成转换。

  2. ...我没有使用-version修改,因为它在您的上下文中没有意义(并且还会导致跳过-resize部分)。

  3. ...我在您的<IMG SRC=....行中删除了一个空格。

  4. ...我改用exec(...)

如果您坚持在stderr输出中添加一些噪音,则可以尝试添加-monitor参数而不是-verbose ...

我只是遇到了同样的问题。 我注意到的真正奇怪的是,如果图像恰好是我尝试调整大小的确切大小,那么它就可以了。 无论如何,这似乎与内存使用有关,可以通过PHP中的配置设置来解决。 浏览其他论坛后,我发现了此问题并进行了修复。

将此行放在调用imagemagick的PHP脚本的顶部:

putenv("MAGICK_THREAD_LIMIT=1");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM