4

我刚刚将一个站点从一个主机移动到另一个主机。服务器环境非常相似(LAMP 堆栈),所有代码在传输时都可以正常工作,除了一行。我已经对其进行了一些突变以进行测试,但仍然得到非常奇怪的结果:

<?php
$out = `php ../test/test.php 123 abc`;
?>

从 SSH 中的命令行运行php ../test/test.php 123 abc时,它可以正常工作,正如预期的那样。当我php testrunner.php在 SSH 中运行:(上面只有“$out”行的文件)时,它也可以按预期工作。

testrunner.php但是一旦我从浏览器加载,它就会挂起。用于ps aux | grep php监视进程,进程似乎产生并消亡(为简洁起见截断):

myuser   12790  0.0  0.3 259016 45284  . . . 0:00 php ../test/test.php 123 abc

如果我将“$out”行修改为:

<?php
$out = `php ../test/test.php 123 abc &`;
?>

然后我使该脚本在后台运行。令人惊讶的是,几秒钟后,当我ps aux | grep php再次运行时,它显示了相同的内容,但使用了新的 PID。我继续运行 ps aux 并继续使用不同的 PID 看到它。这会持续相当长的一段时间(几秒钟,甚至一分钟)。

这对我来说很奇怪,因为 test.php 只有一行来回显一些用于测试目的的文本。

从终端工作正常。从网络调用时挂起并有其他奇怪的行为。我错过了什么吗?

(我通过将输出重定向到一个日志文件来证明,当从 Web 浏览器运行时,PHP 脚本似乎调用了 ITSELF 而不是其他脚本 test.php。当它的行为像这样时,它不会收到任何$argv参数...但是当我从命令行运行它时,一切都很好!奇怪?)

更新:天啊...我只是在观察服务器进程,而 test.php 的 PHP 进程开始失控。它们增加了数百甚至数千个进程:服务器被关闭了一分钟,SSH 等等。它现在恢复了,但我无法解释发生了什么。代码中没有循环,所涉及的两个文件都非常简单,为了测试目的而隔离......

我正在与我的主机合作,因为他们回复了我的支持票,以查看这是否与环境相关或什么......什么可能导致这种情况发生,只需更改服务器环境?

4

2 回答 2

0

我的主人 A Small Orange 提供了帮助,但最后,我或他们所能想到的只是(来自我的支持票):

... SuPHP 或我们作为堆栈的一部分运行的其他一些基于安全的软件正在阻止您的进程产生新进程(因为这种行为由于显而易见的原因可能是不安全的)...

无论如何,这些脚本在我的 Macbook(与 nginx 的配置非常不同)和我的旧主机的 LAMP 堆栈上运行良好,ASO 具有类似的设置。

也许我会问关于在不调用命令行的情况下生成长时间运行的进程,以便调用脚本不会在另一个问题中被阻塞。

于 2013-02-08T16:06:47.317 回答
-3

删除空格并加上下划线

$out = `php ../test/test.php_123_abc`;
于 2013-02-08T04:50:32.517 回答