如何确定运行PHP CLI脚本的正确推荐


How do I determine the correct commend for running a PHP CLI script?

我有一个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"answers"php5-CLI"。有什么方法可以让我在实时网络服务器上确定哪个命令是正确的吗?显然,我不想一个接一个地尝试,因为一个错误的选择可能会让我再次停赛。

您的"exec()"将几乎立即返回,因此,如果它处于循环中,您可能会生成无数个,如前所述。

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

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

http://php.net/manual/en/function.exec.phphttp://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对脚本的解释。

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