fclose no me funciona y no me cierra el archivo

Iniciado por robertito_prado, 31 Mayo 2012, 16:32 PM

0 Miembros y 1 Visitante están viendo este tema.

robertito_prado

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
Mira a tu alrrededor y llora, dime que cojones se valora

WarGhost

Es raro, me parece que el problema no es el fopen, que datos contienen el array $apli?
¿Qué culpa tengo yo de tener la sangre roja y el corazón a la izquierda?

robertito_prado

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
Mira a tu alrrededor y llora, dime que cojones se valora

~ Yoya ~

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 (php,6,9,11,16) [Seleccionar]
if (!empty($_POST["boton"])){         
       $nombre = basename("semana.csv");
            $f = fopen($nombre, "w");     
       for ($y=0; $y<$filasaplicacion; $y++){
         fwrite($f,$apli[$y]);
echo $apli[$y];
         for ($x=0; $x<3; $x++){
            fwrite($f,","); 
echo ',';           
            fwrite($f,$datos[$x][$y]);
echo $datos[$x][$y];
         }
             fwrite($f,"\n");
            }
       fclose($f);
exit;
       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);
        }
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

robertito_prado

#4
No me va... ahora simplemente me escribe los datos en la pantalla...
muchas gracias!!
Mira a tu alrrededor y llora, dime que cojones se valora

WHK

El archivo tiene permisos de escritura? tienes los errores habilitados en php?

robertito_prado

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
Mira a tu alrrededor y llora, dime que cojones se valora