[英]Running exec() from PHP not working
这适用于我的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文件夹。 我还应该检查什么? 当我从终端运行命令时,它运行正常。
尝试将convert更改为完整路径以进行转换,例如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。
如果您的PHP代码是通过Web服务器(例如Apache)执行的,则Apache进程(httpd)可能会在受限制的unix用户(例如apache或httpd)下运行。 受限制的Unix用户通常在试图生成pdf的/Applications/XAMPP/htdocs/MY_APP/images/
目录中没有写权限。 尝试使用以下命令,看看是否可行:
exec("convert /Applications/XAMPP/htdocs/MY_APP/images/test.png /tmp/test.pdf", $output);
var_dump($output);
上面的命令尝试在/tmp
目录中生成pdf,这通常对于Apache unix用户是可写的。
我注意到您已经为图像文件夹指定了777。 请了解仅chmod 777到images文件夹是不够的。 您还需要在所有父目录中向Apache用户授予写权限,例如MY_APP,htdocs,XAMPP,Applications等,这是一个很大的安全隐患 ,我必须补充。
我遇到了同样的问题:安全模式已关闭,但仍然无法执行Image Magick的转换。
我发现由于某种原因,php无法看到脚本(甚至包括通过php.ini包含在include_path中的路径)。 检查日志,发现错误是:
sh: convert: command not found
尝试使用fullpath调用脚本(我使用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);
?>
如果您在Windows下遇到此问题,请尝试exec('identify pathtoyourfile')。 如果可以,但是exec('convert ...')不起作用,您可能无意中调用了Window的convert实用程序而不是IM的convert。 解决方案是将IM的转换重命名为cconvert。 或者,检查IM是否位于PATH环境变量的开头。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.