Browse Source

report de [13576] qui inclue

- modif de l'affichage des stats pour eviter 500 requetes serveur sur rien.gif
- un flock plus robuste en cas de NFS sans NFSlock
svn/root/tags/spip-3.0.0-alpha1
Cerdic 13 years ago
parent
commit
9e0dda656e
  1. 47
      ecrire/inc/flock.php
  2. 12
      ecrire/inc/statistiques.php

47
ecrire/inc/flock.php

@ -102,7 +102,6 @@ function lire_fichier ($fichier, &$contenu, $options=false) {
}
}
//
// Ecrire un fichier de maniere un peu sure
//
@ -128,14 +127,48 @@ function ecrire_fichier ($fichier, $contenu, $ecrire_quand_meme = false, $trunca
// de le recreer si le locker qui nous precede l'avait supprime...)
if (substr($fichier, -3) == '.gz')
$contenu = gzencode($contenu);
if ($truncate)
@ftruncate($fp,0);
$s = @fputs($fp, $contenu, $a = strlen($contenu));
$ok = ($s == $a);
// si c'est une ecriture avec troncation , on fait plutot une ecriture complete a cote suivie unlink+rename
// pour etre sur d'avoir une operation atomique
// y compris en NFS : http://www.ietf.org/rfc/rfc1094.txt
// sauf sous wintruc ou ca ne marche pas
$ok = false;
if ($truncate AND _OS_SERVEUR != 'windows'){
include_spip('inc/acces');
$id = creer_uniqid();
// on ouvre un pointeur sur un fichier temporaire en ecriture +raz
if ($fp2 = spip_fopen_lock("$fichier.$id", 'w',LOCK_EX)) {
$s = @fputs($fp2, $contenu, $a = strlen($contenu));
$ok = ($s == $a);
spip_fclose_unlock($fp2);
spip_fclose_unlock($fp);
// unlink direct et pas spip_unlink car on avait deja le verrou
@unlink($fichier);
// le rename aussitot, atomique quand on est pas sous windows
// au pire on arrive en second en cas de concourance, et le rename echoue
// --> on a la version de l'autre process qui doit etre identique
@rename("$fichier.$id",$fichier);
// precaution en cas d'echec du rename
@unlink("$fichier.$id");
if ($ok)
$ok = file_exists($fichier);
}
else
// echec mais penser a fermer ..
spip_fclose_unlock($fp);
}
// sinon ou si methode precedente a echoueee
// on se rabat sur la methode ancienne
if (!$ok){
// ici on est en ajout ou sous windows, cas desespere
if ($truncate)
@ftruncate($fp,0);
$s = @fputs($fp, $contenu, $a = strlen($contenu));
$ok = ($s == $a);
spip_fclose_unlock($fp);
}
// liberer le verrou et fermer le fichier
spip_fclose_unlock($fp);
@chmod($fichier, _SPIP_CHMOD & 0666);
if ($ok) return $ok;
}

12
ecrire/inc/statistiques.php

@ -111,10 +111,16 @@ function aff_statistique_visites_par_visites($serveur='', $id_article=0, $classe
// http://doc.spip.org/@http_img_rien
function http_img_rien($width, $height, $class='', $title='') {
return http_img_pack('rien.gif', $title,
"width='$width' height='$height'"
if (!isset($GLOBALS['browser_name'])){
include_spip('inc/layer');
}
if ($GLOBALS['browser_name']=="MSIE" AND version_compare($GLOBALS['browser_version'],'7','<'))
$height=$height-1;
return
"<div style='width:{$width}px;height:{$height}px;line-height:0px;font-size:0px;padding:0;margin:0;border:0;'"
. (!$class ? '' : (" class='$class'"))
. (!$title ? '' : (" title=\"$title\"")));
. (!$title ? '' : (" title=\"$title\""))
."></div>";
}
// Donne la hauteur du graphe en fonction de la valeur maximale

Loading…
Cancel
Save