PHP7 cli vs php-fpm

时间:2015-12-08 20:57:53

标签: php php-7

我用php-fpm和cron任务运行php在nginx后面到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
        )
)

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

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

没有(对象)投射就不会发生。此外,如果我将$arrnew stdClass()实例化,则不会发生。

似乎$arr = (object)被php7的引擎保存在内存中。

可能是配置问题。任何人之前遇到过或者可以解释一下吗?

感谢。

1 个答案:

答案 0 :(得分:4)

这是PHP 7中的一个已报告的错误,现已修复:

https://bugs.php.net/bug.php?id=71067