2

这适用于我的 PHP 代码

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

现在我需要使用 ImageMagick 的“转换”命令将 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

4 回答 4

2

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

这可以通过以下方式找到:

<?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。

于 2013-02-15T17:58:58.277 回答
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);

上面的命令尝试在/tmpApache unix 用户通常可写的目录中生成 pdf。

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

于 2013-02-15T05:10:27.793 回答
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);
?>
于 2014-04-18T16:06:28.300 回答
0

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

于 2015-08-25T12:19:28.837 回答