Ecriture fichier - lock après fermeture

Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
29 août 2018
-
Salut à tous !

Voilà j'ai un petit soucis, parfois ( aléatoire mais très rare ) j'âi un soucis suite à une ecriture dans un nouveau fichier, et je cherches un moyen de gérer le cas.

Pour commencer, je crées le fichier dans un répertoire (build) puis le déplace dans un autre pour qu'il soit traité (work) [ ~une fois traité il est bougé dans proc].

Dans un premier temps, je passais par un fopen/fwrite/fclose puis j'effectuais le move. Parfois ca ne fonctionnait pas car le fichier était (message erreur) en cours d'utilisation (je tiens à signaler aue chaque process créé le fichier en utilisant un timestamp et un id d'une table donc pas de double acces possible ou autre, d'autant que le process est séquentiel donc pas de traitement parallèle).

Bref j'ai supposé que mon fclose pouvait avoir des ratés, et vu que la priorité est d'avoir le fichier dans mon work, je fais comme ceci:


		file_put_contents($fpath,$buffer); 		
		rename($fpath,$this->ftp_locDir . $fname);
		if(file_exists($this->ftp_locDir . $fname) == false){
			print "File move failed for '$fname' : create in work and remove build\n";
			unlink($fpath);
			file_put_contents($this->ftp_locDir . $fname,$buffer); 		
		}


Donc bon aujourd'hui j'ai bien tout dans mon work.
Mais j'ai toujoursl'info dans le log :
The process cannot access the file because it is being used by another process.


aussi j'ai parfois le même message suite au unlink (donc parfois mon "ramasse miettes " suffit, parfois non).

Du coup ma question est : avez vous déjà eu ce comportement? comment améliorer tout ca ? (bon en soit là je vais juste rajouter un cleaner du build mais si je peux éviter c'est mieux)


merci d'avance !

Naga

PS : aucuns soucis sur tout ce qui concerne les droits sur les répertoires/fichiers, les nom de fichier, les contenu et il n'y a pas d'accès simultanés
Afficher la suite