Foros del Web » Programando para Internet » PHP »

Fatal error: Call to a member function getElementsByTagName() ... pero no siempre

Estas en el tema de Fatal error: Call to a member function getElementsByTagName() ... pero no siempre en el foro de PHP en Foros del Web. Esta algo extraño mi error.. por que solo lo da cuando quiere.. y pues eso es mas estresante... a ver si alguien me puede ayudar.... ...
  #1 (permalink)  
Antiguo 04/01/2013, 12:43
Avatar de Capimaster  
Fecha de Ingreso: agosto-2004
Mensajes: 494
Antigüedad: 19 años, 8 meses
Puntos: 2
Fatal error: Call to a member function getElementsByTagName() ... pero no siempre

Esta algo extraño mi error.. por que solo lo da cuando quiere.. y pues eso es mas estresante...
a ver si alguien me puede ayudar....
Les paso toda la referencia...
la url es... http://www.elcapitolio.com.mx/admin/cobranza/cine.php por si alguien lo quiere comprobar

mi codigo es...
Código PHP:
Ver original
  1. <?php
  2. $doc = new DOMDocument();
  3. $doc->loadHTMLFile('http://cinemex.com/cines/83');
  4. $xpath = new DOMXPath($doc);
  5. $peliculas = $xpath->query('//div[@class="block"]');
  6. $imagenes = $xpath->query('//div[@class="img-cont"]');
  7. $horario = $xpath->query('//div[@class="sch-row"]');
  8. $horas = $xpath->query('//div[@class="sch-link"]');
  9.  
  10. for ($i = 0; $i < $peliculas->length; $i++) {
  11.     echo "<img src=\"{$imagenes->item($i)->getElementsByTagName('img')->item(0)->getAttribute('src')}\" /> <br />";
  12.     echo "<div class='cinema'>{$peliculas->item($i)->getElementsByTagName('a')->item(0)->nodeValue} </div>";
  13.     echo "<div class='type' style='width:35px;'>{$peliculas->item($i)->getElementsByTagName('div')->item(1)->nodeValue}</div>";
  14.     echo "<div class='type' style='width:65px;background:#666666 !important;'>{$peliculas->item($i)->getElementsByTagName('div')->item(2)->nodeValue}</div>";
  15.     $mystring=$peliculas->item($i)->getElementsByTagName('p')->item(0)->nodeValue;
  16.     echo "<div class='clear'></div>Horarios para el ".$mystring."<div class='clear'></div>";
  17.     for ($e = 0; $e < $peliculas->item($i)->getElementsByTagName('div')->item(4)->getElementsByTagName('a')->length; $e++) {
  18.        
  19.     echo "<div class='sch-link' ><a href='{$peliculas->item($i)->getElementsByTagName('div')->item(4)->getElementsByTagName('a')->item($e)->getAttribute('href')}' title='comprar' target='_blank' >{$peliculas->item($i)->getElementsByTagName('div')->item(4)->getElementsByTagName('a')->item($e)->nodeValue}</a></div>";
  20.     }
  21.     echo "<div class='clear'></div> <hr />";
  22. }
  23. ?>
Todo anda bien, hasta que agrege el segundo for... que es el que me trae las horas las funciones para el dia mas cercano (hoy)

de repente solo me empezo a dar el error..
Código:
Fatal error: Call to a member function getElementsByTagName() on a non-object in cine.php on line 161
como les repito.. me falla 5 veces y me funciona 5 veces...
la linea 161 dice...

Código PHP:
for ($e 0$e $peliculas->item($i)->getElementsByTagName('div')->item(4)->getElementsByTagName('a')->length$e++) {
        
    echo 
"<div class='sch-link' ><a href='{$peliculas->item($i)->getElementsByTagName('div')->item(4)->getElementsByTagName('a')->item($e)->getAttribute('href')}' title='comprar' target='_blank' >{$peliculas->item($i)->getElementsByTagName('div')->item(4)->getElementsByTagName('a')->item($e)->nodeValue}</a></div>";
    } 
si alguien tiene idea de q puede estar pasando, le agradezco con su ayuda!!!
__________________
http://www.elcapitolio.com.mx - Ocotlán, Jalisco, México
  #2 (permalink)  
Antiguo 04/01/2013, 12:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Fatal error: Call to a member function getElementsByTagName() ... pero no

Pues primero verifica (haz debug) cual es el getElementsByTagName() que no te sirve, ya que puede ser el del 'div' o el de 'a', una vez que identifques cual es, solo es cuestión de que compruebes la respuesta, y veas la razón de porque falla a veces y no, como el problema no es el código, si no el HTML que te trae la pagina de cinemex.com es probable que en ciertas ocasiones te de una respuesta diferente, pero solo lo vas a poder ver si haces logging de lo que recibes y justamente cuando falle puedas monitorear la causa.

Saludos.
  #3 (permalink)  
Antiguo 04/01/2013, 12:52
Avatar de Capimaster  
Fecha de Ingreso: agosto-2004
Mensajes: 494
Antigüedad: 19 años, 8 meses
Puntos: 2
Respuesta: Fatal error: Call to a member function getElementsByTagName() ... pero no

Cita:
Iniciado por GatorV Ver Mensaje
Pues primero verifica (haz debug) cual es el getElementsByTagName() que no te sirve, ya que puede ser el del 'div' o el de 'a', una vez que identifques cual es, solo es cuestión de que compruebes la respuesta, y veas la razón de porque falla a veces y no, como el problema no es el código, si no el HTML que te trae la pagina de cinemex.com es probable que en ciertas ocasiones te de una respuesta diferente, pero solo lo vas a poder ver si haces logging de lo que recibes y justamente cuando falle puedas monitorear la causa.

Saludos.
Gracias GatorV, no conozco nada acerca de debug...pero ahora mismo me pongo investagar como... si tienes a la mano algun tutorial te agradezco

Saludos!
__________________
http://www.elcapitolio.com.mx - Ocotlán, Jalisco, México
  #4 (permalink)  
Antiguo 04/01/2013, 13:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Fatal error: Call to a member function getElementsByTagName() ... pero no

No es nada del otro mundo, simplemente es ir viendo paso a paso que pasa, lo mejor es que hagas un log de eventos y guardes la respuesta que viene de cinemex así vas a poder ver mejor porque hay veces que casca y otras veces no.
  #5 (permalink)  
Antiguo 04/01/2013, 13:07
Avatar de Capimaster  
Fecha de Ingreso: agosto-2004
Mensajes: 494
Antigüedad: 19 años, 8 meses
Puntos: 2
Respuesta: Fatal error: Call to a member function getElementsByTagName() ... pero no

Cita:
Iniciado por GatorV Ver Mensaje
No es nada del otro mundo, simplemente es ir viendo paso a paso que pasa, lo mejor es que hagas un log de eventos y guardes la respuesta que viene de cinemex así vas a poder ver mejor porque hay veces que casca y otras veces no.
oooo ok ok... como podria registrar todos los sucesos en un log? tienes alguna sugerencia existe algun metodo sencillo para capturar toda la respuesta y meterla a un log... no se un txt o algo asi.. o simplemente q me lo mostrara para analizarlo
__________________
http://www.elcapitolio.com.mx - Ocotlán, Jalisco, México
  #6 (permalink)  
Antiguo 04/01/2013, 16:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Fatal error: Call to a member function getElementsByTagName() ... pero no

Pues lo mejor es un log en un txt, y es ir grabando paso a paso, esta clase te puede ayudar:
Código PHP:
Ver original
  1. /**
  2.  * Clase para actuar como logger
  3.  *
  4.  * @author Christopher Valderrama
  5.  */
  6. class Logger {
  7.     private $handle;
  8.  
  9.     public function __construct($logFile, $append = false)
  10.     {
  11.         $mode = ($append) ? 'a' : 'w';
  12.         $this->handle = fopen($logFile, $mode);
  13.     }
  14.  
  15.     public function log($info)
  16.     {
  17.         $str = "[" . date("Y/m/d h:i:s", mktime()) . "] " . $info . "\r\n";
  18.         fwrite($this->handle, $str);
  19.     }
  20.  
  21.     public function __destruct()
  22.     {
  23.         fclose($this->handle);
  24.     }
  25. }

Es algo simple y se usa así:
Código PHP:
Ver original
  1. $log = new Logger('log.txt', true);
  2. $log->log('algo');

Etiquetas: call, fatal, function, html, siempre
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:07.