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.
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
E facendo 'che php' punta a'/usr/bin/php', giusto? –
Sembra un bug, suggerirei di segnalarlo su http://bugs.php.net – Andrea