2015-12-08 14 views
11

Sto eseguendo il php dietro nginx con php-fpm e le attività di cron su php binario (/ usr/bin/php).PHP7 cli vs php-fpm

Ho trovato un'incoerenza: lo stesso script genera risultati diversi quando lo eseguo tramite bp php e tramite fpm.

NOTA Si applica solo a PHP7. Su un altro server l'ho testato con 5.6 e il risultato è identico.

Ecco cosa ho trovato. Il seguente script:

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

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

salvato a test.php. Quando l'eseguo attraverso il browser (php-FPM), produrrà:

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

Ma quando eseguo da CLI, il risultato è diverso:

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

Non accade senza la (oggetto) casting. Inoltre, se istanzerò $arr con new stdClass(), non accadrà.

Sembra che lo $arr = (object) venga conservato nella memoria dal motore di php7.

Forse si tratta di un problema di configurazione. Qualcuno l'ha incontrato prima o può spiegare?

Grazie.

+0

Ci sono stati alcuni problemi di caching poco prima PHP7 è stato rilasciato, possibilmente correlati a uno di loro. Era a causa di alcune ottimizzazioni di velocità – exussum

+0

E facendo 'che php' punta a'/usr/bin/php', giusto? –

+3

Sembra un bug, suggerirei di segnalarlo su http://bugs.php.net – Andrea

risposta