【问题标题】:PHP7 cli vs php-fpmPHP7 cli 与 php-fpm
【发布时间】:2015-12-08 20:57:52
【问题描述】:

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

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

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

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

谢谢。

【问题讨论】:

  • 在 PHP7 发布之前存在一些缓存问题,可能与其中之一有关。是由于一些速度优化
  • which php 指向/usr/bin/php,对吧?
  • 这看起来像一个错误,我建议在bugs.php.net报告它
  • 能否请您更新您正在运行的 PHP7 版本?
  • 是的,@Andrea,看起来它是在 rc2 中引入的,存在于黄金大师和 7.1 中。但是……只影响班级。 3v4l.org/PJR7m

标签: php php-7


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-25
    • 2017-01-10
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多