从PHP运行exec()无法正常工作

时间:2013-02-15 05:02:29

标签: php imagemagick

这适用于我的PHP代码

$output = array();
exec("ls /Applications/XAMPP/htdocs/MY_APP/images", $output);
var_dump($output);

现在我需要使用ImageMagick的“convert”命令将PNG文件转换为PDF文件。但是以下内容没有做任何事情并且没有返回任何错误。

$output = array()
exec("convert /Applications/XAMPP/htdocs/MY_APP/images/test.png /Applications/XAMPP/htdocs/MY_APP/images/test.pdf", $output);
var_dump($output);

是权限问题吗?我把chmod 777给了images文件夹。我还应该检查什么?当我从终端运行命令时,它工作正常。

4 个答案:

答案 0 :(得分:2)

尝试将转换更改为完整路径以进行转换,例如USR / local / bin中/转换

可以通过以下方式找到:

<?php
echo "<pre>";
system("type convert"); 
echo "</pre>";
?>

<?php
echo "<pre>";
system('which convert',$path); print_r($path); 
echo "</pre>";
?> 

我刚刚重新阅读您的帖子并注意到您使用的是XAMPP,因此上述答案可能无效。

尝试将所有内容放在同一文件夹中,以消除路径等问题。

exec("convert test.png test.pdf");

你也安装了ghostscript吗?要证明它有效而不是ghostscript问题,请尝试保存为jpg而不是pdf。

答案 1 :(得分:1)

如果您的PHP代码是通过您的Web服务器(例如Apache)执行的,那么Apache进程(httpd)可能在受限制的unix用户(例如apache或httpd)下运行。受限制的unix用户通常不会在/Applications/XAMPP/htdocs/MY_APP/images/目录中拥有您尝试生成pdf的写入权限。请尝试使用此命令,看看是否有效:

exec("convert /Applications/XAMPP/htdocs/MY_APP/images/test.png /tmp/test.pdf", $output);
var_dump($output);

上面的命令尝试在/tmp目录中生成pdf,这通常是Apache unix用户可写的。

我注意到您已将777分配给图像文件夹。请理解仅仅chmod 777到图像文件夹是不够的。您还需要在所有父目录中为Apache用户提供写入权限,例如MY_APP,htdocs,XAMPP,应用程序等,这是一个<很大的安全风险,我必须补充。

答案 2 :(得分:1)

我遇到了同样的问题:安全模式已关闭,但仍无法执行Image Magick的转换。

我发现,由于某种原因,php无法看到脚本(甚至包括通过php.ini在include_path中的路径)。检查日志,我发现错误是:

sh: convert: command not found

尝试使用完整路径调用脚本(我使用which convert进行了检查)我终于设法通过exec使其正常运行。

因此,假设转换完整路径为/usr/local/bin,请尝试运行以下命令:

<?php    
    $output = array();
    exec("/usr/local/bin/convert /Applications/XAMPP/htdocs/MY_APP/images/test.png /Applications/XAMPP/htdocs/MY_APP/images/test.pdf", $output);
    var_dump($output);
?>

答案 3 :(得分:0)

如果您在Windows下遇到此问题,请尝试exec(&#39;识别pathtoyourfile&#39;)。如果这样可行,但exec(&#39;转换...&#39;)不是你可能无意中调用Window的转换实用程序而不是IM的转换。解决方案是将IM的转换重命名为cconvert。或者,检查IM是否位于PATH环境变量的开头。