PHP exec() 返回空值

4
目前我的目标是使用PHP exec()的输出,但是得到了空值。我正在使用firephp(firebug扩展)进行记录,但无法弄清为什么它是空的。
完整代码在这里:https://github.com/MattMcFarland/ninja-forms-uploads-custom/blob/dev/uploads-custom.php 表单在这里:http://www.hvac-hacks.com/?page_id=1383&preview=true&form_id=96
            exec('mogrify -auto-orient -verbose -format jpg '.$dir."/".$user_file_name,$ouput);
            fb($output);
            curl_exec('mogrify -auto-orient -verbose -format jpg '.$dir."/".$user_file_name,$output);
            fb($output);
            $output = shell_exec('mogrify -auto-orient -verbose -format jpg '.$dir."/".$user_file_name);
            fb($output);

目前,对于我使用的每种exec方法,控制台都显示为空。真的不知道该怎么做,完全不知所措。

控制台确实也可以工作,因为它显示其他fb();的内容。exec命令会显示一行带有数字3的空行,表示返回了3次空值。

有任何想法吗?

2个回答

3

如果无法找到您要运行的命令,则exec将为空。您需要使用putenv告诉php可以在哪里找到mogrify。在我的情况下,mogrify的路径为/opt/local/bin。因此,以下代码将起作用,您只需要使用适合您环境的正确路径即可。

putenv("PATH=/opt/local/bin");
exec('mogrify -auto-orient -verbose -format jpg '.$dir."/".$user_file_name,$ouput);
fb($output);
curl_exec('mogrify -auto-orient -verbose -format jpg '.$dir."/".$user_file_name,$output);
fb($output);
$output = shell_exec('mogrify -auto-orient -verbose -format jpg '.$dir."/".$user_file_name);
fb($output);

我希望你能够从中受益。

谢谢,这很有见地。实际上,问题是权限问题,但还是感谢您的分享! - docodemore

3

问题是权限问题。用户没有被允许使用BASH。

必须在apache用户的/etc/passwd中将bin/false更改为bin/bash。

回想起来,最好只添加bin/mogrify。


仅作为评论 - 如果您不能/不想允许apache使用bash,并且您想要运行的命令不需要任何输入,则可以考虑设置一个crontab,将文件输出到apache目录中,这样您就可以直接从php读取它,而无需使用任何系统命令。 - Mark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接