Skip to content
Extraits de code Groupes Projets
Valider 2ade999d rédigé par Fil's avatar Fil
Parcourir les fichiers

ne pas tester flock dans les répertoires où n'a jamais l'intention d'écrire...

ne pas tester flock dans les répertoires où n'a jamais l'intention d'écrire (bref, ne les tester que si on a l'intention d'écrire)
parent a1192e62
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -13,7 +13,7 @@ if (LOCK_UN!=3) { ...@@ -13,7 +13,7 @@ if (LOCK_UN!=3) {
define ('LOCK_NB', 4); define ('LOCK_NB', 4);
} }
function test_flock ($fichier, $fp=false) { function test_flock ($fichier, $ecriture = false) {
static $flock = array(); static $flock = array();
global $flag_flock; global $flag_flock;
if (!$flag_flock) if (!$flag_flock)
...@@ -35,8 +35,12 @@ function test_flock ($fichier, $fp=false) { ...@@ -35,8 +35,12 @@ function test_flock ($fichier, $fp=false) {
AND (filemtime("$dir/.flock_naze") > time() - 3600)) AND (filemtime("$dir/.flock_naze") > time() - 3600))
$flock[$dir] = false; $flock[$dir] = false;
else { // pas d'infos de flock, on va tester
// pas d'infos de flock, on va tester // MAIS attention on ne veut effectivement
// tester que les repertoires dans lesquels on ecrit
// Si on ne fait qu'y lire, pas necessaire (et pas
// forcement autorise)
else if ($ecrire) {
$fichiertest = $dir.'/' $fichiertest = $dir.'/'
.substr(uniqid(@getmypid(), true),-6).".tmp"; .substr(uniqid(@getmypid(), true),-6).".tmp";
if ($fp = @fopen($fichiertest, 'w')) { if ($fp = @fopen($fichiertest, 'w')) {
...@@ -45,6 +49,7 @@ function test_flock ($fichier, $fp=false) { ...@@ -45,6 +49,7 @@ function test_flock ($fichier, $fp=false) {
$flock[$dir] = true; $flock[$dir] = true;
@touch("$dir/.flock_ok"); @touch("$dir/.flock_ok");
@unlink("$dir/.flock_naze"); @unlink("$dir/.flock_naze");
@fclose($fp);
spip_log("test $dir: flock ok"); spip_log("test $dir: flock ok");
} else { } else {
$flock[$dir] = false; $flock[$dir] = false;
...@@ -58,7 +63,8 @@ function test_flock ($fichier, $fp=false) { ...@@ -58,7 +63,8 @@ function test_flock ($fichier, $fp=false) {
@touch("$dir/.flock_naze"); @touch("$dir/.flock_naze");
@unlink("$dir/.flock_ok"); @unlink("$dir/.flock_ok");
} }
} } else
$flock[$dir] = false;
} }
return $flock[$dir]; return $flock[$dir];
...@@ -66,8 +72,8 @@ function test_flock ($fichier, $fp=false) { ...@@ -66,8 +72,8 @@ function test_flock ($fichier, $fp=false) {
// Si flock ne marche pas dans ce repertoire ou chez cet hebergeur, // Si flock ne marche pas dans ce repertoire ou chez cet hebergeur,
// on renvoie OK pour ne pas bloquer // on renvoie OK pour ne pas bloquer
function spip_flock($filehandle, $mode, $fichier) { function spip_flock($filehandle, $mode, $fichier, $ecriture = false) {
if (!test_flock($fichier)) if (!test_flock($fichier, $ecriture))
return true; return true;
$r = flock($filehandle, $mode); $r = flock($filehandle, $mode);
...@@ -151,7 +157,7 @@ function ecrire_fichier ($fichier, $contenu) { ...@@ -151,7 +157,7 @@ function ecrire_fichier ($fichier, $contenu) {
// verrouiller le fichier destination // verrouiller le fichier destination
if ($fp = @fopen($fichier, 'a')) if ($fp = @fopen($fichier, 'a'))
while (!spip_flock($fp, LOCK_EX, $fichier)); while (!spip_flock($fp, LOCK_EX, $fichier, 'ecriture'));
else else
return false; return false;
...@@ -183,7 +189,7 @@ function supprimer_fichier($fichier) { ...@@ -183,7 +189,7 @@ function supprimer_fichier($fichier) {
return; return;
// verrouiller le fichier destination // verrouiller le fichier destination
if ($flock = test_flock($fichier)) { if ($flock = test_flock($fichier, 'ecriture')) {
if ($fp = @fopen($fichier, 'a')) if ($fp = @fopen($fichier, 'a'))
while (!spip_flock($fp, LOCK_EX, $fichier)); while (!spip_flock($fp, LOCK_EX, $fichier));
else else
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter