2010-09-20 5 views
17

Le code suivant fait partie d'un service web PHP que j'ai écrit. Il prend des données Base64 téléchargées, les décode et les ajoute à un fichier. Tout cela fonctionne très bien. Le problème est que lorsque je lis la taille du fichier après l'opération d'ajout, j'obtiens la taille du fichier avant l'opération d'ajout.PHP taille de fichier de rapports ancienne taille

$fileOut = fopen($filepath.$filename, "ab") 
fwrite($fileOut, base64_decode($data)); 
fflush($fileOut); 
fclose($fileOut); 

$newSize = filesize($filepath.$filename); // gives old file size 

Qu'est-ce que je fais mal?

System est:

  • PHP 5.2.14
  • Apache 2.2.16
  • noyau Linux 2.6.18
+0

Cela ne devrait pas causer le problème. –

Répondre

34

Sur les systèmes Linux, les données extraites par filesize() est "statcached".

Essayez d'appeler clearstatcache(); avant l'appel de la taille du fichier.

7

Selon le manuel PHP:

Les résultats de cette fonction sont mis en cache. Voir clearstatcache() pour plus de détails .

http://us2.php.net/manual/en/function.filesize.php

Fondamentalement, vous devez effacer le cache stat après l'opération du fichier:

$fileOut = fopen($filepath.$filename, "ab") 
fwrite($fileOut, base64_decode($data)); 
fflush($fileOut); 
fclose($fileOut); 

clearstatcache(); 

$newSize = filesize($filepath.$filename); 
2

PHP stocke toutes les métadonnées de fichier qu'il lit dans un cache, il est donc probable que la taille du fichier soit déjà stockée dans ce cache et que vous deviez l'effacer. Voir clearstatcache et appelez-le avant d'appeler filesize. `B` est utilisé pour sortir des données binaires.