¿Por qué el siguiente código causa un error de segmentación?Error de segmentación en 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();
?>
Notas adicionales
1) me encontré este código en dos servidores diferentes de LAMP y ambos generan errores como child pid somenumber exit signal Segmentation fault (11)
en mis archivos error.log. En un servidor, ejecuto Ubuntu 10.04, Apache 2, Mysql 5 y PHP 5.3.2-1ubuntu4.9, y en otro servidor ejecuto Ubuntu 11.10, Apache 2, mysql 5 y PHP 5.3.6-13ubuntu3.3 .
2) Es extraño, pero cuando comento la línea $d2 = new DAO();
o la línea exit;
, la falla de segmentación desaparece.
3) El fallo de segmentación ocurre sin importar qué tabla db selecciono a partir de la declaración preparada
¿Qué está pasando? Estoy tan frustrado. Perdí el valor de un día entero debido a esta falla de segmentación. Por favor ... si alguien sabe lo que está pasando, que me haga saber
Gracias
El mejor que puede hacer es dejar caer Smarty por completo. Es innecesario sobrecarga. * "¡Oye, agreguemos un motor de plantillas sobre PHP, que es un motor de plantillas!" * ': Rolleyes:' – NullUserException
El código que estás viendo arriba es solo una versión destilada de un problema que existe en 5 años viejo software. Así que no puedo abandonar inteligentemente sin reescribir cientos de páginas de código. – John
Es solo una prueba, pero en el constructor, ¿puede importar primero la variable global y asignarla a una local antes de usarla? Tal vez el segfault desaparezca. Es solo una idea, entonces no hay garantía. – hakre