这适用于我的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文件夹。我还应该检查什么?当我从终端运行命令时,它工作正常。
答案 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环境变量的开头。