2010-06-15 5 views
0

Mon script PHP sert les fichiers en utilisant readfile() et les en-têtes HTTP ajoutés manuellement. Les fichiers ont une taille d'environ 1 Mo, donc aucune lecture partielle n'est nécessaire.Servir le fichier via un script PHP et le remplacer en toute sécurité à la volée

Quelle est la meilleure façon de remplacer ce fichier par un fichier mis à jour, mais assurez-vous que les téléchargements déjà commencés ne seront pas brisés? Je souhaite que les téléchargements en attente soient terminés avec l'ancienne version de fichier récupérée.

Plate-forme: Linux, PHP 5, Apache 2.

Répondre

1

Utilisation numérotation de version dans le nom de fichier:

$candidates=sort(glob($dir . $prefix . '*')); 
$most_recent=array_pop($candidates); 

par exemple, file0001.pdf file0002.pdf file0003.pdf

C.

+0

simple mais grand :-) – tomash

1

Vous pouvez utiliser flock pour obtenir un verrou sur la poignée de fichier - cela signifie que vous processus d'écriture bloquera jusqu'à ce qu'il soit en mesure d'obtenir un verrou exclusif. Par conséquent, vos lecteurs obtiendraient un verrou partagé LOCK_SH, puis utiliseraient simplement fpassthru pour sortir le fichier et enfin libérer le verrou. L'écriture obtiendrait un verrou exclusif LOCK_EX, effectuerait l'écriture en sécurité, puis libérerait le verrou permettant à tous les lecteurs bloqués de commencer l'extraction du nouveau fichier.

+0

Mais sur un site très chargé vous ne serez jamais un verrou exclusif – symcbean

Questions connexes