Instagraph PHP照片编辑exec()函数不执行该函数,但在命令行上工作


Instagraph PHP photo editing exec() function does not execute function, but works on command line?

我正试图通过PHP和ImageMagick添加Instagram中的gotham功能(http://net.tutsplus.com/tutorials/php/create-instagram-filters-with-php/)给定的脚本不起作用,但命令起作用。当我生成命令并将其复制粘贴到命令行时,它们可以正常工作。然而,当我尝试用exec()执行它们时,它们不起作用。我看了看给出的输出,它说没有找到命令。我在php.ini中关闭了安全模式,exec()不是禁用的函数。我试过添加"与"符号和'2>&1',但无济于事。为什么exec()不理解该命令?这是的脚本

function gotham($image) {
    exec("convert " . $image . " -modulate 120,10,100 -fill '#222b6d' -colorize 20 -gamma 0.5 -contrast -contrast " . $image . " 2>&1", $output1);
    exec("convert " . $image . " -bordercolor black -border 20x20 " . $image . " 2>&1", $output2);
}

以下是$output变量的var_dump的内容:

array(1) { [0]=> string(30) "sh: convert: command not found" } array(1) { [0]=> string(30) "sh: convert: command not found" }

似乎有路径问题。试试这些

  exec("/path/to/Imagick/bin/convert -version", $output2);

  exec("usr/local/bin/convert -version", $output);

首先确定imagemagik在系统上的安装位置。您可以通过运行从终端完成此操作

whereis convert

若要解决权限问题,请以运行web服务器的用户身份登录。这通常是apache/nobody/www-data,具体取决于您的发行版和/或设置。在终端中运行以下内容:

su - www-data

以上操作将当前用户切换为运行web服务器的用户。就我而言,这是www-data

现在使用完整路径运行convert命令(由whereis convert和php脚本中的参数确定)。如果没有权限问题,这应该可以执行。在大多数情况下,您应该会看到与在web服务器中从php脚本运行此命令时相同的错误。

通过运行检查转换程序的权限

ls -l `whereis convert`