2015-12-08 3 views
11

Ich führe PHP hinter Nginx mit php-fpm und Cron Aufgaben zu PHP binary (/ usr/bin/php).PHP7 cli vs php-fpm

Ich habe eine Inkonsistenz gefunden - das gleiche Skript gibt verschiedene Ergebnisse aus, wenn ich es durch php binary und durch fpm laufen lasse.

HINWEIS Dies gilt nur für PHP7. Auf einem anderen Server habe ich es mit 5.6 getestet und das Ergebnis ist identisch.

Hier ist, was ich gefunden habe. Das folgende Skript:

<?php 
class Test { 
    public function test(){ 
     $arr = (object) [ 
      'children' => [] 
     ]; 
     $arr->children[] = 1; 
     return $arr; 
    } 
} 

$o = new Test(); 
$o->test(); 
print_r($o->test()); 

Gespeichert in test.php. Wenn ich es durch Browser (php-fpm) laufen, produzieren:

stdClass Object 
(
    [children] => Array 
     (
      [0] => 1 
     ) 
) 

Aber wenn ich es von CLI ausführen, ist das Ergebnis anders aus:

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

Es ist nicht ohne (Objekt geschehen ist) Gießen. Auch wenn ich $arr mit new stdClass() instanziiere, wird es nicht passieren.

Scheint wie der $arr = (object) wird im Speicher von php7-Engine erhalten.

Vielleicht ist es ein Konfigurationsproblem. War schon mal jemand davor gestanden oder kann es erklären?

Danke.

+0

Es nur einige Caching-Probleme waren vor PHP7 veröffentlicht wurde, im Zusammenhang möglicherweise zu einem von ihnen. War aufgrund einiger Geschwindigkeitsoptimierungen – exussum

+0

Und '' php 'zeigt auf'/usr/bin/php', richtig? –

+3

Dies sieht wie ein Fehler aus, ich würde vorschlagen, es unter http://bugs.php.net zu melden – Andrea

Antwort