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