Я запускаю php за nginx с задачами 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.
Возможно, это проблема конфигурации. Кто-нибудь сталкивался с этим раньше или может объяснить?
Спасибо.
which php
указывает на/usr/bin/php
, верно? - person Mr. Llama   schedule 09.12.2015