援引;php“;来自PHP脚本的命令导致奇怪的进程行为

援引;php“;来自PHP脚本的命令导致奇怪的进程行为,php,process,command-line-interface,Php,Process,Command Line Interface,我刚刚将一个站点从一个主机移动到另一个主机。服务器环境非常相似(LAMP堆栈),所有代码在传输时都正常工作,只有一行代码除外。为了测试,我对其进行了一些变异,但仍然得到了非常奇怪的结果: <?php $out = `php ../test/test.php 123 abc`; ?> 如果我将“$out”行修改为: <?php $out = `php ../test/test.php 123 abc &`; ?> 然后我使脚本在后台运行。令人惊讶的是,几秒钟

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

<?php
$out = `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脚本似乎会调用自身而不是另一个脚本test.PHP。当它的行为类似于此时,它不会接收任何
$argv
参数……但当我从命令行运行它时,一切正常!奇怪?)

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


我正在和我的主机一起工作,因为他们会回复我的支持票,看看这是否与环境有关或者什么。。。仅仅通过更改服务器环境,什么会导致这种情况发生?

删除空格并放置下划线

$out = `php ../test/test.php_123_abc`;

我的主人,一个小橘子,一直很有帮助,但最后,我或他们能想到的是(从我的支持票):

。。。我们在堆栈中运行的SUPPP或其他一些基于安全性的软件正在阻止您的进程生成新进程(因为这种行为可能由于明显的原因而不安全)

在任何情况下,这些脚本在我的Macbook(与nginx的配置非常不同)和我的旧主机的LAMP堆栈上都可以正常工作,ASO也有类似的设置


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

您应该阅读关于@BenD the formatting at eat away其backticks的内容。不过,并不是说其余部分是正确的。@Cthulhu,是的,我知道(我以前也有过这种情况),但答案基本上是胡言乱语,这表明对反勾号的作用有误解。我假设您已经检查了
shell\u exec()
是否启用了。
test.php
上的权限是什么?您是否确保apache/webserver用户具有text.php上的执行权限?特权可以解释为什么它从终端运行,但在启用webservershell_exec()访问时不运行,是的。我已经尝试在test.php(我想是644?)和755777上保留常规权限,以及这两者之间的所有内容,包括
chmod+x test.php
。我没有对服务器的root访问权限,我的主机基本上说,“这应该可以工作”。。。希望澄清。这听起来可能有点迂腐,但是你检查过当前的工作目录吗?您确定要执行的脚本位于您认为的位置并且可以访问吗?无论如何,最好完全避开相对路径。另外,test.php是可执行的可能还不够。。。调用进程可能还需要对其父目录的执行权限。只是抛出一些可能性…是的。我尝试了相对路径和远程路径,验证文件是否存在。(很好地提醒一下,不过……你知道在记住简单地重新启动httpd之前,我的头撞了几次墙吗???)这里是在黑暗中拍摄的,但是考虑到你在不同的环境中,这可能是你的PHP可执行路径的问题吗?你在里面有一辆车吗?(
!/usr/bin/php
等)?我不知道这是否有效,但您是否尝试过
$out=`/usr/bin/php/abs/path/test/test.php=`(为php可执行文件和您的文件指定正确的路径)?
$out = `php ../test/test.php_123_abc`;