【问题标题】:shell_exec in PHP is not workingPHP 中的 shell_exec 不起作用
【发布时间】:2015-10-05 12:18:56
【问题描述】:

shell_exec() 不在我的本地主机上工作。我阅读了很多网站来解决这个问题,但找不到解决方案。 这段代码:

    $output = shell_exec("env");
    print "<pre>$output</pre>";

不提供任何输出。

我签入了 php.ini disable_functions,但 shell_exec 未被禁用。 我做了error_reporting = E_ALL,但又没有输出(没有错误)。我得到的只是一个空白屏幕。甚至safe_mode 也关闭了。

如果我在上面的代码之后写echo "BULB";,它会打印“BULB”。

可能是什么问题?

【问题讨论】:

  • 如果你只是在控制台中运行env,你会得到输出吗?
  • 我得到这个输出ReferenceError: env is not defined
  • lsdir 等其他命令是否有效?
  • 该错误消息在我看来就像 JavaScript。你用的是什么外壳?
  • 想一想,也许您误解了@Federico 的评论,并从浏览器中的 JS 控制台执行了命令……他的意思是打开命令提示符/终端模拟器并从那里运行命令。为了让我们帮助您,我们需要更多地了解您的系统。特别是,了解操作系统和默认 shell 会很有用。

标签: php shell shell-exec


【解决方案1】:

您希望从env 获得什么信息?从您的 cmets 来看,在我看来,您好像是在尝试在 Windows 系统上使用 Linux 命令——这永远不会奏效。

在 Linux 系统上,env 命令本身会返回已定义的环境变量列表。但是env 在 Windows 中不是有效的命令。

如果你只是在寻找环境变量列表,这实际上可以在 PHP 中获得,而无需使用 shell 命令。 PHP 有一个内置的全局变量$_ENV,它包含程序声明时定义的所有环境变量的副本。只需print_r($_ENV) 即可查看。

另一方面,如果您出于某种原因确实需要使用shell_exec(),那么您需要考虑您正在使用的操作系统。在 Linux 上,您将使用 env 命令。 Windows 上的等价物是set,不带任何参数。所以你的代码变成了:

$output = shell_exec("set");

请注意,输出的格式可能与您在 Linux 上获得的格式不同,因此如果您正在解析它,该代码也必须更改。

如果您需要您的代码能够在多个平台上运行,那么您需要在调用shell_exec() 之前编写额外的代码以确定操作系统并制定要使用的正确命令。

【讨论】:

  • 一般来说,您关于调用shell_exec 的可移植性的观点是有效的,但env Windows 中的有效命令。
  • @TomFenech - 我刚刚打开我的 dos 提示符并输入了“env”,然后得到了经典的 'env' is not recognised as an internal or external command.。所以如果它是一个 Windows 命令,它不在我系统的路径中。
  • 很公平 - 这是我系统 (Windows 8.1) 上命令提示符中的有效命令。
  • 嗯,我也是Win 8.1,所以不知道有什么区别。
猜你喜欢
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
  • 2013-05-26
  • 2012-06-20
  • 1970-01-01
  • 2012-02-10
相关资源
最近更新 更多