Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: robertito_prado en 31 Mayo 2012, 16:32 pm



Título: fclose no me funciona y no me cierra el archivo
Publicado por: robertito_prado en 31 Mayo 2012, 16:32 pm
Pues creo un archivo, meto contenido dentro y cuando lo quiero cerrar no me cierra, y me sigue escribiendo cosas que tiene la pagina.
Aqui esta el codigo, sencillo:


if (!empty($_POST["boton"])){         
       $nombre = basename("semana.csv");
            $f = fopen($nombre, "w");     
       for ($y=0; $y<$filasaplicacion; $y++){
         fwrite($f,$apli[$y]);
         for ($x=0; $x<3; $x++){
            fwrite($f,",");             
            fwrite($f,$datos[$x][$y]);
         }
             fwrite($f,"\n");
            }
       fclose($f);
       header("Cache-Control: public");
       header("Content-Description: File Transfer");
       header("Content-Disposition: attachment; filename=".$nombre);
       header("Content-Type: application/force-download");
       header("Content-Transfer-Encoding: binary");   
       readfile($nombre);
        }




Pues eso me mete bien los datos que quiero, pero luego no me cierra y me sigue metiendo cosas de la pagina, como el doctype y el head, por ejemplo  :-(
Gracias de antemano


Título: Re: fclose no me funciona y no me cierra el archivo
Publicado por: WarGhost en 31 Mayo 2012, 16:51 pm
Es raro, me parece que el problema no es el fopen, que datos contienen el array $apli?


Título: Re: fclose no me funciona y no me cierra el archivo
Publicado por: robertito_prado en 31 Mayo 2012, 17:16 pm
El array $apli contiene una lista de nombres de aplicaciones, pero creo qu ese no es el fallo por dos motivos:

1.Utilizo ese array en otras partes de mi program y nunca me dio fallo.
2.Esa parte de codigo para abrir un archivo tambien la use en otros programas, con diferentes arrays y datos (obviamente) y siempre me da el mismo fallo que te comento en TODOS.

Gracias :D


Título: Re: fclose no me funciona y no me cierra el archivo
Publicado por: ~ Yoya ~ en 2 Junio 2012, 20:11 pm
Primero que nada, no puedes escribir nada en un archivo si no utilizas fwrite. Por lo tanto si aparecen datos de mas, lo mas seguro que el problema esta en los datos que le estas pasando al fwrite. Y mucho menos que desde los datos HTML estén sobre-escribiendo archivos en el sistema XD.

Te recomiendo que vayas mostrando el contenido que le pasaras al fwrite y luego que termine todo le haces un exit, para finalizar la ejecucion del archivo y nose muestre lo que esta después.

Prueba con esto:
Código
  1. if (!empty($_POST["boton"])){        
  2.       $nombre = basename("semana.csv");
  3.            $f = fopen($nombre, "w");    
  4.       for ($y=0; $y<$filasaplicacion; $y++){
  5.         fwrite($f,$apli[$y]);
  6. echo $apli[$y];
  7.         for ($x=0; $x<3; $x++){
  8.            fwrite($f,",");  
  9. echo ',';          
  10.            fwrite($f,$datos[$x][$y]);
  11. echo $datos[$x][$y];
  12.         }
  13.             fwrite($f,"\n");
  14.            }
  15.       fclose($f);
  16.       header("Cache-Control: public");
  17.       header("Content-Description: File Transfer");
  18.       header("Content-Disposition: attachment; filename=".$nombre);
  19.       header("Content-Type: application/force-download");
  20.       header("Content-Transfer-Encoding: binary");  
  21.       readfile($nombre);
  22.        }
  23.  


Título: Re: fclose no me funciona y no me cierra el archivo
Publicado por: robertito_prado en 4 Junio 2012, 09:12 am
No me va... ahora simplemente me escribe los datos en la pantalla...
muchas gracias!!


Título: Re: fclose no me funciona y no me cierra el archivo
Publicado por: WHK en 4 Junio 2012, 15:53 pm
El archivo tiene permisos de escritura? tienes los errores habilitados en php?


Título: Re: fclose no me funciona y no me cierra el archivo
Publicado por: robertito_prado en 5 Junio 2012, 09:11 am
Si que tine pero da lo mismo, ya lo solucione, por si te interesa solo tuve que darle la vuelta y eliminar los Fwrite, por asi decirlo:


           $nombre = basename("semana.csv");   
      
       header("Cache-Control: public");
       header("Content-Description: File Transfer");
       header("Content-Disposition: attachment; filename=".$nombre);
       header("Content-Type: application/force-download");
       header("Content-Transfer-Encoding: binary");   
      
       for ($y=0; $y<$filasaplicacion; $y++){
         echo $apli[$y];
         for ($x=0; $x<3; $x++){
            echo ",";             
            echo $datos[$x][$y];
         }
             echo "\n";
            }   


Gracias por todo a todos!!
Un saludo!! :D