PHP7 cli与php-fpm的区别

11

我在nginx后面运行php,使用php-fpm和cron任务来运行php二进制文件(/usr/bin/php)。

我发现了一个问题-当我通过php二进制文件和fpm运行相同的脚本时,输出的结果不同。

注意:这仅适用于PHP7。在另一台服务器上,我已经测试过5.6版本,并且结果是相同的。

以下是我发现的情况。以下脚本:

<?php
class Test {
    public function test(){
        $arr = (object) [
            'children' => []
        ];
        $arr->children[] = 1;
        return $arr;
    }
}

$o = new Test();
$o->test();
print_r( $o->test() );

保存在test.php中。当我通过浏览器(PHP-FPM)运行它时,会产生:

stdClass Object
(
    [children] => Array
        (
            [0] => 1
        )
)

但是当我从命令行中执行它时,结果是不同的:

[root@server1 web]# php -f test.php
stdClass Object
(
    [children] => Array
        (
            [0] => 1
            [1] => 1
        )
)

如果没有进行(对象)转换,就不会发生这种情况。另外,如果我使用 new stdClass() 实例化 $arr ,也不会发生这种情况。

看起来php7引擎将 $arr = (object) 保存在内存中。

也许这是一个配置问题。有人遇到过这种情况或者能解释一下吗?

谢谢。


执行 which php 会指向 /usr/bin/php,对吗? - Mr. Llama
3
这似乎是一个错误,我建议在http://bugs.php.net上报告它。 - Andrea
1
你能告诉我你正在使用哪个PHP7版本吗? - Oliver Nybroe
2
是的,@Andrea,看起来它是在rc2中引入的,在gold master和7.1中存在。但是...只影响类。https://3v4l.org/PJR7m - bishop
啊,所以这确实是一个新的错误。 - Andrea
显示剩余5条评论
1个回答

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接