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
        )
)

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

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

如果没有(对象)强制转换,它就不会发生。另外,如果我用它实例化$arr它就new stdClass()不会发生。

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

可能是配置问题。有人遇到过或可以解释一下吗?

谢谢。

4

1 回答 1

4

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

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

于 2015-12-09T19:55:46.287 回答