【问题标题】:Running shell_exec() in symfony在 symfony 中运行 shell_exec()
【发布时间】:2010-06-28 15:38:10
【问题描述】:

我有一个程序在进行一些后台处理后返回一个逗号分隔的数字字符串。我打算使用 shell_exec 在 symfony 中运行它;但是,我得到的只是 NULL(通过 var_dump() 显示。我尝试了以下调试步骤。

我通过 Symfony 中的命令行石灰单元测试运行了该文件(它是一个 PHP 类)——它可以工作并在那里给出正确的结果。

只是为了检查,我在同一个地方尝试了一个简单的命令ls -l,看看我是否会得到任何东西。同样,我遇到了同样的问题 - 浏览器中的 var_dump 显示为 NULL,但它通过命令行运行。

可能是什么问题?在浏览器中运行shell_exec() 有限制吗?

编辑:澄清一下,当我在 Web 服务器上将 shell_exec() 命令作为独立的 php 脚本运行时(例如,将它们放在我的文档根目录中),它们似乎无法在 symfony 框架下运行,出于某种原因。

【问题讨论】:

    标签: php shell symfony1


    【解决方案1】:

    我终于解决了,原来是一件很简单的事情,而且很不相关。

    我运行的 shell 命令是这种格式:face_query -D args。我没有意识到 Apache 会以用户 www-data 的身份执行 PHP,因此程序 face_query 不会在 PATH 中(目录实际上是 ~/bin)。将程序名称更改为程序的完整路径即可解决。

    我还从中得知,只有www-data 有权执行的命令才能运行。在这种情况下,www-data 与我的用户在同一个组中,但否则可能会出现问题。

    【讨论】:

      【解决方案2】:

      您是否尝试过使用 exec?或其他变体之一。我永远不确定该使用哪一个,并且总是与 exec 混为一谈。

      http://uk.php.net/manual/en/function.exec.php

      【讨论】:

      • 否;我尝试了 exec()、system() 和反引号运算符,但仍然没有。
      【解决方案3】:

      您的网络服务器是否在安全模式下运行 php?

      注意:当 PHP 在安全模式下运行时,此功能被禁用。 来自:http://php.net/manual/en/function.shell-exec.php

      【讨论】:

      • 否;我检查了 phpinfo(),safe_mode 是 Off。
      • 这是您的服务器还是共享主机?他们可能在 web 服务器的 php.ini 中禁用了 shell_exec。
      • 不,这是我自己的 Ubuntu 服务器上的 apache 服务器。当我通过浏览器将它们作为文档根目录中的独立 PHP 文件运行时,shell_exec() 命令 do 起作用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      • 2012-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多