从PHP运行exec()不起作用

从PHP运行exec()不起作用,php,imagemagick,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/

这在我的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);

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

如果您的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指定给images文件夹。请理解chmod 777仅用于图像文件夹是不够的。您需要在所有父目录中为Apache用户授予写权限,例如MY_APP、htdocs、XAMPP、应用程序等,这是一个很大的安全风险。,我必须补充。

如果您的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授予images文件夹。请理解,仅将chmod 777授予images文件夹是不够的。您需要在所有父目录以及MY_应用程序、htdocs、XAMPP、应用程序等中授予Apache用户写权限,这是一个很大的安全风险,我必须添加。

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

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

<?php
echo "<pre>";
system("type convert"); 
echo "</pre>";
?>
exec("convert test.png test.pdf");

另外,您是否安装了ghostscript?为了证明它可以正常工作,而不是出现ghostscript问题,请尝试保存为jpg而不是pdf。

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

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

<?php
echo "<pre>";
system("type convert"); 
echo "</pre>";
?>
exec("convert test.png test.pdf");

另外,您是否安装了ghostscript?为了证明它可以正常工作,而不是出现ghostscript问题,请尝试将其保存为jpg而不是pdf。

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

我发现,出于某种原因,php无法看到脚本(甚至包括include_path through php.ini中的路径)

尝试使用完整路径调用脚本(我使用转换的
检查它),最终通过
exec
使它正常运行

因此,假设convert fullpath为
/usr/local/bin
,请尝试运行以下命令:


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

我发现,出于某种原因,php无法看到脚本(甚至包括include_path through php.ini中的路径)

尝试使用完整路径调用脚本(我使用转换的
检查它),最终通过
exec
使它正常运行

因此,假设convert fullpath为
/usr/local/bin
,请尝试运行以下命令:




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

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

您的Apache用户是否有权运行convert?这是什么版本的PHP版本?听起来像很像以前的问题。当您以root用户身份从命令行运行程序时,程序是否工作?作为另一个用户如何?我是否需要授予运行特定命令的特定权限?我的PHP版本是5.3.15-其中安全模式已被弃用-对吗?您的Apache用户是否有权运行convert?什么版本的PHP版本是这个吗?这听起来很像以前的问题。当你以root用户身份从命令行运行程序时,它能工作吗?作为另一个用户呢?我需要授予运行特定命令的特定权限吗?我的PHP版本是5.3.15-其中安全模式已被弃用-对吗?他说他在文件夹上设置了chmod 777,允许自己、组和其他人写入图像文件夹中的@user1073122 chmod 777是不够的。OP还需要在所有父目录中为Apache用户授予写入权限。我尝试了“/tmp/test.pdf”,但没有成功。我只是将输出打印为“array(0){}”我理解安全风险。因此我不介意将其放入tmp文件夹。但这似乎也不起作用。好的,您可以尝试将
ini\u设置为('safe\u mode','Off')吗
在脚本开始时。他说他在文件夹上设置了chmod 777,允许自己、组和其他人写入。@user1073122 chmod 777在images文件夹中是不够的。OP还需要在所有父目录中为Apache用户授予写入权限。我尝试了“/tmp/test.pdf”,但没有成功。我只是将输出打印到