PHP7 cli против php-fpm

Я запускаю 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.

Возможно, это проблема конфигурации. Кто-нибудь сталкивался с этим раньше или может объяснить?

Спасибо.


person galchen    schedule 08.12.2015    source источник
comment
Были некоторые проблемы с кэшированием непосредственно перед выпуском PHP7, возможно, связанные с одной из них. Это было связано с некоторыми оптимизациями скорости   -  person exussum    schedule 09.12.2015
comment
И выполнение which php указывает на /usr/bin/php, верно?   -  person Mr. Llama    schedule 09.12.2015
comment
Это похоже на ошибку, я бы посоветовал сообщить об этом на bugs.php.net.   -  person Andrea    schedule 09.12.2015
comment
Вот почему вам следует дождаться PHP 7.1 с производственным развертыванием :)   -  person Marcin Orlowski    schedule 09.12.2015
comment
Не могли бы вы обновить версию PHP7, которую вы используете?   -  person Oliver Nybroe    schedule 09.12.2015
comment
Однако @uruloke задает хороший вопрос. Если вы используете версию RC, а не выпуск 7.0.0, это может быть ошибка, которая уже исправлена.   -  person Andrea    schedule 09.12.2015
comment
Ага, @Andrea, похоже, он был представлен в rc2, существует в gold master и 7.1. Но... влияет только на классы. 3v4l.org/PJR7m   -  person bishop    schedule 09.12.2015
comment
Ах, так это это новая ошибка.   -  person Andrea    schedule 09.12.2015
comment
@Mr.Llama, это правильно (/usr/bin/php). uruloke Я использую 7.0.0 (не RC). MarcinOrlowski это полуфабрикат, сервер используется для локальных проектов, а не для клиентов. Вы абсолютно правы, я подожду обновлений, прежде чем использовать его на наших рабочих серверах. я сообщу об этом   -  person galchen    schedule 09.12.2015
comment
Я столкнулся с той же проблемой, пожалуйста, см. =1#comment110287469_62358900" title="разный вывод команды exec при выполнении в браузере по сравнению с терминалом"> stackoverflow.com/questions/62358900/   -  person Ronald    schedule 13.06.2020


Ответы (1)


Это была ошибка в PHP 7, о которой сообщалось, и теперь она исправлена:

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

person galchen    schedule 09.12.2015