Perché il seguente codice causa un errore di segmentazione?Errore di segmentazione in PHP?
<?php
$CNX = new mysqli('localhost','dbuser', 'dbpass', 'dbtest');
class DAO
{
var $stmt;
function DAO()
{
$this->stmt = $GLOBALS['CNX']->stmt_init();
}
function listing()
{
$this->stmt->prepare('SELECT * FROM any_table');
}
}
class Page
{
function go()
{
$d1 = new DAO();
$d2 = new DAO();
$d1->listing();
exit;
}
}
$tpl = new Page();
$tpl->go();
?>
note aggiuntive
1) mi sono imbattuto questo codice su due diversi server LAMP ed entrambi generano errori come child pid somenumber exit signal Segmentation fault (11)
nei miei file error.log. Su un server, sto usando Ubuntu 10.04, Apache 2, Mysql 5 e PHP 5.3.2-1ubuntu4.9, e su un altro server sto usando Ubuntu 11.10, Apache 2, mysql 5 e PHP 5.3.6-13ubuntu3.3 .
2) È strano, ma quando commento la linea $d2 = new DAO();
o la riga exit;
, l'errore di segmentazione scompare.
3) L'errore di segmentazione si verifica indipendentemente da quale tabella db seleziono dal nella dichiarazione preparata
Che cosa sta succedendo? Sono così frustrato. Ho perso un'intera giornata di tempo a causa di questo errore di segmentazione. Si prega di ... se qualcuno sa cosa sta succedendo, me lo faccia sapere
Grazie
La cosa migliore da fare è far cadere smarty del tutto. È un sovraccarico inutile. * "Ehi, aggiungiamo un motore di template su PHP, che è un motore di template stesso!" * ': Rolleyes:' – NullUserException
Il codice che vedi qui sopra è solo una versione distillata di un problema che esiste in 5 anni vecchio software. Quindi non posso davvero rinunciare a smarty senza riscrivere centinaia di pagine di codice. – John
È solo un test, ma nel constuctor, è possibile importare prima la variabile globale e assegnarla a una locale prima di usarla? Forse il segfault sparisce. È solo un'idea, quindi nessuna garanzia. – hakre