我刚刚将一个站点从一个主机移动到另一个主机。服务器环境非常相似(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 等等。它现在恢复了,但我无法解释发生了什么。代码中没有循环,所涉及的两个文件都非常简单,为了测试目的而隔离......
我正在与我的主机合作,因为他们回复了我的支持票,以查看这是否与环境相关或什么......什么可能导致这种情况发生,只需更改服务器环境?