Ver Mensaje Individual
  #3 (permalink)  
Antiguo 16/05/2011, 14:51
LhaN
 
Fecha de Ingreso: septiembre-2008
Mensajes: 148
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: Problemas al generar un log en txt (doble log)

Es un solo archivo PHP, no hay includes ni nada por el estilo, lo que ves es como empieza y como termina, lo del medio que no esta son los métodos que se usan en el constructor, pero el único método que provoca el "fallo" es el pintarMapa.

Como determine eso? Lo que hice fue comentar todas las lineas del constructor (es decir Mapa($,$)), salvo obviamente las que corresponden a la apertura, escritura y cierre del archivo en ESE método (en otros métodos solo escribo una linea que indica que método se ejecuto).

Luego a medida que descomentaba cada linea hacia una carga de la pagina. Ninguno de los otros métodos genera un doble log. Solo el método de pintarMapa(), pero veras que el método pintarMapa() se ejecuta luego de cerrar el archivo. Esto lo remarco por que olvide comentar que agregue la posibilidad de guardar la imagen como archivo o simplemente mostrarla. De haber dos ejecuciones del código implicaría que se generaran 2 imágenes para los respectivos logs. Pero no ocurre esto... solo se genera una imagen. Es decir que:

Código PHP:
Ver original
  1. <?
  2.     class Mapa{
  3.     //atributos varios
  4.     function Mapa($_ancho,$_alto){//el constructor
  5.         Global $c;
  6.         $c++;
  7.         $this->logFile=fopen('Log-'.date("ydm").'-'.date("His").'.txt','a+');
  8.         fwrite($this->logFile,$c.'function Mapa($,$) on line 22'.chr(13).chr(10));
  9.         $this->ancho=$_ancho;
  10.         $this->alto=$_alto;
  11.         $this->inicializarGrilla();//No llama ninguna otra función
  12.         $this->crearCaminos();//Llama varias subfunciones...
  13.         fclose($this->logFile);
  14.         //$this->pintarMapa(false);// NOTAR QUE ESTA COMENTADA
  15.     }
  16.     //los demás métodos
  17.     }
  18.     //fuera de la clase
  19.     $c=0;
  20.     $mapa=new Mapa(8,8);
  21.     ?>
Si ejecuto el codigo con la linea del pintarMapa() comentado todo lo anterior se ejecuta una vez.
Si lo ejecuto sin comentarlo. Se crean dos "logs", y el primero corresponde a la única imagen generada.
Casi es como si no tuviera sentido lo que digo, si tienes alguna sugerencia de como detectar el error soy todo ojos... lo que si, soy novato en php, hice lo del log por que no se como obtener un reporte o un debug linea a linea en php, eso es posible? como lo hago? o a que te refieres con que simplemente haga un debug?