2015-12-08 67 views
11

我在后面跟着跑用php-fpm的和cron任务的nginx的PHP PHP二进制文件(在/ usr/bin中/ PHP)。PHP7 CLI与PHP-FPM

我发现不一致 - 当我通过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执行它,结果是不同的:

[[email protected] web]# php -f test.php 
stdClass Object 
(
    [children] => Array 
     (
      [0] => 1 
      [1] => 1 
     ) 
) 

它不会发生没有(对象)铸造。此外,如果我将例$arrnew stdClass()它不会发生。

好像$arr = (object)被在内存PHP7的引擎保留。

也许这是一个配置问题。任何人都曾经遇到过或可以解释?

谢谢。

+0

有一些缓存问题PHP7发布之前,可能与他们中的一个。是由于一些速度优化 – exussum

+0

并在做'哪个php'指向'/ usr/bin/php',对吧? –

+3

这看起来像一个错误,我会建议在http://bugs.php.net报告它 – Andrea

回答