ImageMagick转换工作在命令行,但不是通过PHP exec()

我正在使用PHP的exec()来使用ImagicMagick的convert图像。 这是在CentOS服务器上运行的。

 exec(convert http://img.zgserver.com/php/logo3w.png.jpg -resize 640 /home/mysite/public_html/public/img/posts/original/1414_301a4.jpg); 

使用exec()不会使新图像出现在目标文件夹中。 但是,如果我要在shell中运行相同的命令,那么这个命令完美无缺!

我相信这是一个PATH问题。 如果是这样,我该如何检查PHP正在使用的path,以及如何在PHP中设置正确的path?

首先,您应该尝试使用一个确实存在且可检索的输入文件:

  wget http://img.zgserver.com/php/logo3w.png.jpg

   -  2012-08-21 20:55:24-- http://img.zgserver.com/php/logo3w.png.jpg
  解决www.google.com(www.google.com)... 173.194.35.179,173.194.35.177,173.194.35.178,...
  连接到www.google.com(www.google.com)| 173.194.35.179 |:80 ...已连接。
   HTTP请求已发送,正在等待响应... 404未找到
   2012-08-21 20:55:24错误404:未找到。

然后,看看哪些convert你的PHP使用:

 exec(which convert 2>/tmp/whichconvert.2 1>whichconvert.1) 

 cat /tmp/whichconvert.{1,2} 

最后,也尝试完整的路径convert

 exec(/usr/local/full/path/to/convert logo: -resize 640 /home/mysite/public_html/public/img/posts/original/1414_301a4.jpg); 

接着

 identify /home/mysite/public_html/public/img/posts/original/1414_301a4.jpg 

更新:

您打算检索的文件可能不是logo3w.png.jpg ,而是logo3w.png

   wget http://img.zgserver.com/php/logo3w.png
   -  2012-08-21 21:04:22  -  http://img.zgserver.com/php/logo3w.png
  解决www.google.com(www.google.com)... 173.194.35.180,173.194.35.177,173.194.35.179,...
  连接到www.google.com(www.google.com)| 173.194.35.180 |:80 ...已连接。
  发送HTTP请求,等待响应... 200 OK
  长度:7007(6.8K)[image / png]
  保存为:“logo3w.png”

   100%[=============================================== ======>] 7,007  - 。 -  K / s在0.02s   

   2012-08-21 21:04:22(451 KB / s) - 'logo3w.png'已保存[7007/7007]

另外,如果它仅适用于本地文件(而不是远程http-URI),则可能需要检查convert使用的http委托是否确实安装在系统上:

 convert -list delegate | grep http https => "/opt/local/bin/curl" -s -k -o "%o" "https:%M" 

此外,请检查您的PHP运行的用户帐户是否确实有权写入目标目录:

 exec(touch /home/mysite/public_html/public/img/posts/original/touchtest); 

接着

 ls -l /home/mysite/public_html/public/img/posts/original/touchtest 
 function execute($command) { # remove newlines and convert single quotes to double to prevent errors $command = str_replace(array("\n", "'"), array('', '"'), $command); # replace multiple spaces with one $command = preg_replace('#(\s){2,}#is', ' ', $command); # escape shell metacharacters $command = escapeshellcmd($command); # execute convert program return shell_exec($command); // or whatever you like } 

我的工作是提供ImageMagick二进制文件的完整路径。 而不是convert ,使用/path/to/convert

 $command = $this->imageMagickFullBinaryPath . ' -resize ' . $dimensions . ' ' . $imageFileToResize . ' ' . $resultingThumbnail; exec($command, $output);