11

nginx の背後で php-fpm と cron タスクを使用して php バイナリ (/usr/bin/php) に対して 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
        )
)

(オブジェクト)キャストなしでは起こりません。また、インスタンス化$arrnew stdClass()ても発生しません。

$arr = (object)php7のエンジンによってメモリに保存されているようです。

多分それは構成の問題です。誰かが前にそれに遭遇したか、説明できますか?

ありがとう。

4

1 に答える 1