cs_sidhannowe
Messages postés75Date d'inscriptionlundi 27 octobre 2003StatutMembreDernière intervention11 décembre 2007
-
12 janv. 2005 à 10:57
cs_GRenard
Messages postés1662Date d'inscriptionlundi 16 septembre 2002StatutMembreDernière intervention30 juillet 2008
-
12 janv. 2005 à 18:20
Salut,
Je développe un script se servant de fichiers texte pour stocker des données. Le problème est que si 2 script accède en meme temps au meme fichier, il risque d'y avoir perte de données ? Dois-je alors utiliser la fonction flock() ?
cs_GRenard
Messages postés1662Date d'inscriptionlundi 16 septembre 2002StatutMembreDernière intervention30 juillet 20081 12 janv. 2005 à 18:02
Tu te trompes... le lock des fichiers dépend bien des systèmes
d'exploitation... donc il se pourait dans la vie de tous les jours
qu'un système d'exploitation ne supporte pas le lock.
En php, si tu ne lock pas, un fichier peut très bien être accedé en lecture ET/OU écriture !!!
Essais ceci :
a.php
<?php
$fp = fopen('test.txt','a+');
fwrite($fp,'salut1'."\n");
sleep(15);
fwrite($fp,'rien1'."\n");
fclose($fp);
?>
b.php
<?php
$fp = fopen('test.txt','a+');
fwrite($fp,'salut2'."\n");
sleep(15);
fwrite($fp,'rien2'."\n");
fclose($fp);
?>
Fait fonctionner a.php et ensuite (avant 15 secondes), b.php
Ton fichier test.txt contiendra ceci :
salut1
salut2
rien1
rien2
Surpris ? (Test avec apache1 ou apache2... le résultat sera le même)
Donc peut importe les threads ou pas... Le fichier n'est pas bloqué !
C'est pourquoi si tu veux VRAIMENT bloquer ton fichier tu dois utiliser
flock ou, tu arrêtes d'utiliser les fichiers et tu passes à base de
données :P
PHP Guru
Écoutez les conseils d'un vieux sage ! Ils sont souvent très utiles.
http://www.lookstrike.com
malik7934
Messages postés1154Date d'inscriptionmardi 9 septembre 2003StatutMembreDernière intervention15 août 200917 12 janv. 2005 à 11:50
Un fichier ne peut pas être ouvert en écriture par deux programmes en
même temps, c'est une question de concurrence. Il peut y avoir milles
lecteurs simultanés (même pendant une écriture) mais un seul qui
écrit...
malik7934
Messages postés1154Date d'inscriptionmardi 9 septembre 2003StatutMembreDernière intervention15 août 200917 12 janv. 2005 à 12:25
Je suis pas un spécialiste php, mais je crois qu'en principe les
scripts sont exécutés un à un, une requête à la fois et il n'y a donc
pas à s'inquiéter de la concurrence.
Vous n’avez pas trouvé la réponse que vous recherchez ?
malik7934
Messages postés1154Date d'inscriptionmardi 9 septembre 2003StatutMembreDernière intervention15 août 200917 12 janv. 2005 à 14:21
Salut GRenard, merci pour l'info.
Ceci dit, ça n'empêche normalement pas qu'un fichier ouvert en écriture
par un process ne peut l'être par un autre non? C'est un principe de
base en concurrence et systèmes d'exploitation et ça m'étonnerait un
peu que PHP ou Apache échappent à cette règle... ou je me trompe? T'as
un contre-exemple si je me trompe?
malik7934
Messages postés1154Date d'inscriptionmardi 9 septembre 2003StatutMembreDernière intervention15 août 200917 12 janv. 2005 à 18:06
Je trouve ça totalement incroyable! Alors qu'on nous a rabattu aux
cours de systèmes d'exploitation qu'on ne peut faire W/W, tu me montres
le contraire !!!
cs_GRenard
Messages postés1662Date d'inscriptionlundi 16 septembre 2002StatutMembreDernière intervention30 juillet 20081 12 janv. 2005 à 18:20
Choisi réponse acceptée pour celles qui t'interessent !
Il y a
pleins de systèmes d'exploitation qu'y n'ont pas le système e lock
(donc flock ne marcherait pas, mais php doit l'émuler au pire)
Mais du lock comme je dis, il y a des systèmes qu'y ne le font pas !
comme par exemple le système d'exploitation TiniOs qui fonctionne sur
de super machine à dual processor 18Mhz :P ne le fait pas (ca ctait
notre cours :P)
PHP Guru
Écoutez les conseils d'un vieux sage ! Ils sont souvent très utiles.
http://www.lookstrike.com