2010-07-01 10 views
9

Este es mi código:PHP - Will fwrite() guardará el archivo inmediatamente?

$zplHandle = fopen($target_file,'w'); 
fwrite($zplHandle, $zplBlock01); 
fwrite($zplHandle, $zplBlock02); 
fwrite($zplHandle, $zplBlock03); 
fclose($zplHandle); 

Cuando se guardará el archivo? ¿Inmediatamente después de escribirlo o después de cerrarlo?

Pregunto esto porque tengo Printfil escuchando archivos en una carpeta e imprimiendo cualquier archivo que se acaba de crear. Si PHP confirma un guardado inmediatamente después de fwrite, puedo encontrarme con problemas de Printfil que no captura las escrituras subsiguientes.

Gracias por la ayuda.

Respuesta

3

Hice una pequeña pieza de código para probarlo y parece que después de fwrite el nuevo contenido se detectará inmediatamente, no después de fclose.

Aquí está mi prueba en Linux.

#!/usr/bin/env php 
<?php 
$f = fopen("file.txt","a+"); 
for($i=0;$i<10;$i++) 
{ 
    sleep(1); 
    fwrite($f,"something\n"); 
    echo $i," write ...\n"; 
} 
fclose($f); 
echo "stop write"; 
?> 

Después de ejecutar el script PHP, yo uso tail -f file.txt para detectar el nuevo content.And Muestra nuevos contenidos al mismo tiempo que la etiqueta de salida de php.

+0

OK. Al menos eso da alguna idea sobre la posibilidad de una descarga antes del tiempo previsto. Voy a trabajar en cosas basadas en los resultados de tus pruebas. Gracias Spawn! – Nirmal

2

el archivo se guardará en fclose. si quiere poner el contenido en el archivo antes, use fflush().

9

PHP puede o no escribir el contenido de inmediato. Hay una capa de almacenamiento en caché en el medio. Puede obligarlo a escribir usando fflush(), pero no puede forzarlo a esperar a menos que use solo un fwrite().

+0

True; OTOH, definitivamente escribirá el contenido (y liberará bloqueos de archivos) cuando llame a fclose(). – Piskvor

+0

@Piskvor: ¿Cuándo el software de supervisión de carpetas reconocerá el archivo recién creado? ¿Será después de guardar o después del lanzamiento de bloqueo? Esto es crucial porque hay unos 8000 bloques de contenido de texto para escribir en el archivo y el programa de monitoreo no debe activarse en ningún punto intermedio. Gracias por tus entradas. – Nirmal

+0

No lo sé, pregunte a la gente de PrintFil. – Sjoerd

Cuestiones relacionadas