15

exec 命令在我的服务器上不起作用,它什么也没做,我已经关闭了 safe_mode,并验证了所有控制台命令都在工作,我尝试过使用绝对路径。我已经检查了应用程序的权限,并且我需要的所有应用程序都具有执行权限。我不知道还能做什么,这是我尝试过的代码的概要。

echo exec('/usr/bin/whoami');

echo exec('whoami');

exec('whoami 2>&1',$output,$return_val);
if($return_val !== 0) {
    echo 'Error<br>';
    print_r($output);   
}

exec('/usr/bin/whoami 2>&1',$output,$return_val);
if($return_val !== 0) {
    echo 'Error<br>';
    print_r($output);   
}

最后两个代码显示:

Error
Array ( )

我已经联系了服务器服务,他们无法帮助我,他们不知道为什么 exec 命令不起作用。

4

4 回答 4

13

看看/etc/php.ini,在下面:

; This directive allows you to disable certain functions for security reasons.
; It receives a comma-delimited list of function names. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
; http://www.php.net/manual/en/ini.sect.safe-mode.php#ini.disable-functions
disable_functions =

确保 exec 没有像这样列出:

disable_functions=exec

如果是这样,请将其删除并重新启动 apache。

为了便于调试,我通常喜欢手动执行 php 文件(无需在主 ini 中设置即可请求更多错误)。为此添加标题:

#!/usr/bin/php
ini_set("display_errors", 1);
ini_set("track_errors", 1);
ini_set("html_errors", 1);
error_reporting(E_ALL);

到文件的开头,给它使用权限chmod +x myscript.php并执行它./myscript.php。尤其是在向日志文件写入大量内容的繁忙服务器上,这一点非常小心。

编辑

听起来像是权限问题。创建一个简单的 bash 脚本echo "helo world"并尝试运行它。确保您对该文件和包含该文件的文件夹具有权限。你应该只做chmod 755测试。

于 2012-08-30T14:47:13.430 回答
7
于 2017-08-20T16:56:25.913 回答
6

由于您要从 PHP 上下文中退出到本机 shell,因此您将遇到很多调试问题。

我过去使用过的最好和最简单的方法是将脚本的输出写入日志文件并在 PHP 执行期间对其进行跟踪。

<?php
shell_exec("filename > ~/debug.log 2>&1");

然后在一个单独的外壳中:

tail -200f ~/debug.log

当您执行 PHP 脚本时,您的错误和 shell 调用的输出将显示在您的debug.log文件中。

于 2012-08-30T15:02:09.527 回答
4

您可以检索exec命令的输出和返回代码,这些可能包含可以解释问题的信息......

exec('my command', $output, $return);
于 2012-08-30T14:42:33.430 回答