gpt4 book ai didi

php - 从 PHP 脚本调用 "php"命令导致奇怪的进程行为

转载 作者:可可西里 更新时间:2023-10-31 23:51:21 24 4
gpt4 key购买 nike

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

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

在 SSH 中从命令行运行 php ../test/test.php 123 abc 时,它工作正常,正如预期的那样。当我在 SSH 中运行:php testrunner.php(上面只有“$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 调用时挂起并有其他奇怪的行为。我错过了什么吗?

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

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

当我的主机响应我的支持请求时,我正在与他们一起工作,以查看这是否与环境相关或者是什么...仅通过更改服务器环境可能导致这种情况发生的原因是什么?

最佳答案

我的房东 A Small Orange 提供了帮助,但最后,我或他们能想到的只有(来 self 的支持票):

... that SuPHP or some other security-based software we have running as part of our stack is preventing your processes from spawning new processes (because that behavior can be insecure for obvious reasons) ...

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

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

关于php - 从 PHP 脚本调用 "php"命令导致奇怪的进程行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14765708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com