[Php-avanzado] Grabar archivo de texto
Leonardo Tadei - Pegasus Tech Supply
leonardot en pegasusnet.com.ar
Mie Oct 22 14:46:25 ART 2008
Hola Mauro,
El mar, 21-10-2008 a las 21:22 -0300, Mauro Giuffo escribió:
> Leo:
>
>
> lo arme de esa manera porque si lo abria en modo w+ me borraba lo que
> tenia, pero lo solucione asi:
Debe haber un pifie en algún otro lugar, porque con w+, podés leer y no
se pierde nada, salvo el truncado si la escritura es más chica que el
original.
Como vos reemplazás un nro por otro en el archivo, no deberías tener
problemas de truncado...
Tu lógica puede haber fallado con la inicialización de $num...
> <?php
> $num=0;
> if (file_exists("./contador.txt")) { //si existe
> $arch=fopen("./contador.txt","r+"); // lo abro
Insisto que en este caso, abrir con r+ o con w+ debería ser idéntico...
> if(!feof($arch)){
> $num=fread($arch,1000000);
> fseek($arch,0); //posiciona al principio
El fseek() siempre es más prolijo tenerlo justo antes de fwrite().
Cuando el código se hace más complejo, desparramar estas cosas se
vuelven una complicación grande...
> }
> }else{ //si no existe
> $arch=fopen("./contador.txt","w+"); //lo creo
> }
> $num++;
> fwrite($arch,$num);
> fclose($arch);
> ?>
>
> Es correcta esta forma de usarlo?
Está buena porque abrís solo una vez al archivo.
Ahora lo que yo haría es:
<?php
$archivo = "./contador.txt";
if (file_exists($archivo)) {
$harch=fopen($archivo,"r+"); //lo abre
} else {
$harch=fopen($archivo,"w+"); //lo crea vacío
}
// Lee el contenido
$num=fread($harch,10000000);
print("Debug: Num leido $num.<br>");
if ($num == "") {
$num = 0;
}
$num++;
fseek($harch,0);
fwrite($harch,$num,strlen($num));
print("Debug: Num escrito $num.<br>");
fclose($harch);
// Para poder borrarlo por FTP mientras se testea
chmod($archivo,0666);
?>
--
Leonardo Tadei
leonardot en pegasusnet.com.ar
http://blog.pegasusnet.com.ar
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key
Más información sobre la lista de distribución Php-avanzado