Hola a todos,
apro un thread qui nella speranza che qualcun'altro ci sia già incappato
Sto sbattendo contro un bug di php, alquanto fastidioso e difficilmente riproducibile, che causa errori di esecuzione al quanto assurdi.
Quanto dico al quanto assurdi, intendo veramente assurdi:
voi vi domanderete "ma dov'è l'errore?" ... ecco, la risposta, assurda, alla vostra domanda è che l'errore è sulla rigaCodice PHP:
<?php
class FakeClass
{
private $fakeVariable;
public function FakeMethod()
{
$this->fakeVariable = true;
}
}
?>
PHP si lamenta del fatto che sto assegnando una variabile ad un elemento che non è un oggettoCodice PHP:
$this->fakeVariable = true;
Ora, ritengo che un uomo possa fare tanti errori quando programma, ma che mi venga detto che non posso impostare una variabile della classe lamentandosi del fatto che $this non è un oggetto è qualcosa di abbastanza preoccupante.
Il problema è che è difficile da far saltare fuori: per ottenere quest'errore devo stressare il webserver per 6/8 ore con pagine che, eseguite, occupano dai 100mb ai 150mb ciascuna lanciando migliaia di query nell'esecuzione della singola pagina
Sorvoliamo sul perché di tutta questa memoria usata e su tutte le query lanciate, il problema è veramente assurdo!
Ho provato a guardare un po in giro e, da quanto ho visto, l'errore ogni tanto salta fuori ma con versioni precedenti di php. Ho però un forte dubbio che il problema sia legato alle funzioni di gestione delle date di php 5.3 (date_*) perché ho letto su bugs.php.net che new datetime() ha problemi nell'allocazione della memoria e dato che ne faccio uso potrebbe essere lui la causa ... però sembra che il bug in questione sia stato sistemato un anno e mezzo fa praticamente.
L'errore viene fuori sia su linux sia su windows e l'unico modo per tamponare e far ripartire apache ogni 5 minuti: ovviamente non è che non viene fuori però il numero di volte che spunta si riduce drasticamente.
Non posso nemmeno downgradare alla serie 5.2 perché mi servono le funzioni di calcolo delle date perché non posso usare gli unixtimestamp, potenzialmente il sistema potrebbe finire a usare date antecedenti al 1970 :\
Qualche altro c'ha sbattuto contro?
EDIT:
il codice che ho postato non fa saltare fuori l'errore di per se, era solo per far vedere specificatamente la riga di codice sulla quale mi si manifesta l'errore