【问题标题】:Calling bash with PHP's shell_exec -- slow用 PHP 的 shell_exec 调用 bash——慢
【发布时间】:2010-12-17 22:45:24
【问题描述】:

我正在使用 PHP 的 shell_exec 函数在我的服务器上调用 bash 脚本。

shell_exec("bash -x /tesladata/isetools/0-extractbytickerforweb.bash $ticker $isedate > /t24alv2/iseoutput/$ticker-$isedate-$thistime.log &");

现在,我以前从 CGI 脚本(“bash -x...”)运行命令,而且速度更快(即时)。现在,脚本运行(> 10 秒)和生成的页面呈现需要非常缓慢的时间。

任何想法为什么这这么慢?我仍然想从 PHP 而不是 CGI 运行 bash 脚本,因为我的整个站点都被转换为 PHP。也许另一个功能更合适?任何想法将不胜感激。

【问题讨论】:

    标签: php bash shell shell-exec


    【解决方案1】:

    您可以查看 PHP 的 exec 和 system 函数,但是我真的看不出它们会加快脚本执行的原因,但值得一试。我很确定这是 apache 的问题(假设您使用的是 apache),而不是 PHP,这个结论的来源是 this bug thread。

    此外,在公共网站上使用这些命令时,您真的应该非常小心。使用escapeshellarg 和escapeshellcmd。

    【讨论】:

      【解决方案2】:

      对于将 Apache 作为 NT 服务运行的 Windows 用户:您似乎可以通过将 Apache 服务配置为使用 用户帐户运行来大大提高 shell_exec() 或 exec() 的性能 并且 不是默认系统帐户。

      例如,我发现将 Apache 作为标准 NT 服务运行会导致 shell_exec() 命令花费 15-17 秒(特别是运行 svn 命令)。 将 Apache 服务更改为使用用户帐户运行会导致时间下降到 4-5 秒——这是一个巨大的差异。

      为此,请打开服务控制面板,右键单击 Apache 服务,然后选择属性。单击登录选项卡并将“本地系统帐户”单选按钮更改为“此帐户”。然后指定您希望服务使用哪个用户帐户。

      请注意,我不是 Windows 管理员;使用用户帐户运行服务可能会产生我不知道的重要影响。

      【讨论】:

      • 有人测试过这个吗?有谁知道如何在 linux 中做到这一点?
      • 我测试过,它对我有用。 Apache 2.4/PHP 5.4.7/Windows 7
      猜你喜欢
      • 2017-07-02
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-09
      • 1970-01-01
      相关资源
      最近更新 更多