【问题标题】:How do I determine the correct commend for running a PHP CLI script?如何确定运行 PHP CLI 脚本的正确命令?
【发布时间】:2014-10-27 08:46:53
【问题描述】:

我有一个 PHP 脚本,它使用以下代码在后台执行另一个 PHP 脚本:

exec("php myScript.php >/dev/null 2>&1 &");

在我的开发服务器上,myScript.php 使用 PHP CLI 运行(我已使用 php_sapi_name() 进行了检查),并按预期运行。但是,在实时服务器上,脚本似乎使用 PHP CGI 运行。这会导致服务器尝试运行无数个相同的脚本,并且我的脚本权限被暂停。

我已经看到了关于运行 PHP CLI 脚本的正确命令的各种建议(取决于确切的服务器配置),包括“php”(这是我的开发服务器使用的)、“php-cli”、 “php5”和“php5-cli”。有什么方法可以确定实时 Web 服务器上的正确命令吗?显然,我并不热衷于一一尝试,因为错误的选择可能会让我再次被停职。

【问题讨论】:

  • 我不明白为什么 php 的用户\所有者会影响脚本的运行方式;特别是“这会导致服务器尝试运行无数个相同的脚本”
  • 我怀疑大量 CGI 实例是由您的 CGI 脚本等待 CLI 调用的返回值引起的。尝试使用 cron 代替后台任务。
  • 这是您的服务器还是托管解决方案。您可能没有执行权限或缺少 PHP 扩展。您可以远程访问服务器并在 CLI 中手动运行脚本进行测试吗?
  • 你是在循环中调用这个exec函数吗?该循环是否终止? myscript.php 是否在循环中包含另一个 exec 调用?有许多因素可能导致无限生成。其中大部分归结为非终止循环

标签: php command cgi command-line-interface


【解决方案1】:

我的托管服务提供商最终能够向我提供他们机器上安装的 PHP CLI 的名称。它有一个不起眼的名字(php43)。如果其他人遇到需要使用 PHP CLI 而不是 PHP CGP 执行脚本的问题,那么您可能需要向您的托管服务提供商询问详细信息。不幸的是,我发现需要一段时间才能找到理解我的问题并且可以问正确的人答案是什么的人,所以你可能需要非常清楚和耐心地对待他们!

【讨论】:

    【解决方案2】:

    您的“exec()”几乎会立即返回,因此如果它处于循环中,您可以生成数以万计的它们,如前所述。

    您需要详细说明您是否看到一堆脚本实例突然运行,或者它们是否只是随着时间的推移而积累起来,好像它们没有退出一样。

    如果已知有关 PHP 和 exec 的问题有很多,其中一些涉及最终用户同时运行的多个问题以及各种不良影响和解决方法:

    http://php.net/manual/en/function.exec.php http://forums.iis.net/t/1149467.aspx?Too+many+php+cgi+s

    据称 mod_php 和 FastCGI 不共享 php-cgi 蔓延问题,因此如果您可以切换到这些问题,您的问题可能会消失。这对 PHP 程序运行时需要在其上标记的用户 ID 做了一些假设,但如果这是一个问题,将以下内容与 suexec 一起使用可以为所使用的用户 ID 提供灵活性。

    这里有一个选项可以让调用脚本不必知道有关下标的实现的详细信息,顺便说一下,您可以通过 exec 和 PHP CLI 模式简单地通过名称调用它,就像您可能已经在做的那样测试一下。

    $ cat the-php-script   # /usr/bin/php5 below would also work.
    #!/usr/bin/php
    <?php
    print("hi\n");
    ?>
    $ chmod 755 the-php-script 
    $ ls -l the-php-script 
    -rwxr-xr-x 1 username username 39 Sep  2 22:37 the-php-script
    $ ./the-php-script 
    hi
    $
    

    理论上应该允许:exec("/...pathname_to.../myScript >/dev/null 2>&1 &"). 功能上的唯一区别是它确定了哪个 PHP 解释脚本。

    【讨论】:

      猜你喜欢
      • 2011-03-14
      • 2012-11-20
      • 2021-08-10
      • 2017-01-10
      • 2012-04-08
      • 1970-01-01
      • 2015-04-21
      • 2015-11-11
      • 2013-04-07
      相关资源
      最近更新 更多