[英]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'>
注意...
...我删除了-verbose
部分(它仅在stderr startline/main_menu.png PNG 600x1024 600x1024+0+0 8-bit DirectClass 92.1KB 0.020u 0:00.020
上生成附加行,这可能是convert命令的原因永远不会完成转换。
...我没有使用-version
修改,因为它在您的上下文中没有意义(并且还会导致跳过-resize
部分)。
...我在您的<IMG SRC=....
行中删除了一个空格。
...我改用exec(...)
如果您坚持在stderr输出中添加一些噪音,则可以尝试添加-monitor
参数而不是-verbose
...
我只是遇到了同样的问题。 我注意到的真正奇怪的是,如果图像恰好是我尝试调整大小的确切大小,那么它就可以了。 无论如何,这似乎与内存使用有关,可以通过PHP中的配置设置来解决。 浏览其他论坛后,我发现了此问题并进行了修复。
将此行放在调用imagemagick的PHP脚本的顶部:
putenv("MAGICK_THREAD_LIMIT=1");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.