2010-07-01 40 views
9

Questo è il mio codice:PHP - Fwrite() salverà immediatamente il file?

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

Quando sarà il file da salvare? È subito dopo averlo scritto o dopo averlo chiuso?

Sto chiedendo questo perché ho Printfil l'ascolto di file in una cartella e stampa qualsiasi file che è stato appena creato. Se PHP esegue un salvataggio immediatamente dopo fwrite, è possibile che si verifichino problemi di Printfil che non cattura le scritture successive.

Grazie per l'aiuto.

risposta

3

Ho fatto un piccolo pezzo di codice per testarlo e sembra che dopo fwrite il nuovo contenuto verrà rilevato immediatamente, non dopo fclose.

Ecco il mio test su 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"; 
?> 

Dopo aver eseguito lo script PHP, io uso tail -f file.txt per rilevare la nuova content.And Essa mostra nuovi contenuti allo stesso tempo come tag di uscita di php.

+0

OK. Almeno questo dà qualche idea sulla possibilità di un flush prima del tempo previsto. Lavorerò sulle cose in base ai risultati dei test. Grazie Spawn! – Nirmal

2

il file verrà salvato su fclose. se si desidera inserire il contenuto nel file in precedenza, utilizzare fflush().

9

PHP può scrivere o meno il contenuto immediatamente. C'è uno strato di caching in mezzo. Puoi forzarlo a scrivere usando fflush(), ma non puoi forzarlo ad aspettare a meno che tu non usi solo un fwrite().

+0

Vero; OTOH, scriverà sicuramente il contenuto (e rilascerà i blocchi dei file) quando chiami fclose(). – Piskvor

+0

@Piskvor: quando il software di monitoraggio della cartella riconoscerà il file appena creato? Sarà dopo un salvataggio o dopo il rilascio del blocco? Questo è cruciale perché ci sono circa 8000 blocchi di testo da scrivere sul file e il programma di monitoraggio non dovrebbe essere attivato da nessuna parte nel mezzo. Grazie per i tuoi input. – Nirmal

+0

Non lo so, chiedi alla gente di PrintFil. – Sjoerd

Problemi correlati