Browse Source

accelerer SPIP : report de [14750] et [14754]

svn/root/tags/spip-3.0.0-alpha1
Cerdic 12 years ago
parent
commit
c92982cfc3
  1. 51
      ecrire/inc/flock.php
  2. 4
      ecrire/public/composer.php

51
ecrire/inc/flock.php

@ -12,6 +12,10 @@
if (!defined("_ECRIRE_INC_VERSION")) return;
// ajouter define('_CREER_DIR_PLAT', true); dans mes_options pour restaurer
// le fonctionnement des faux repertoires en .plat
define('_CREER_DIR_PLAT', false);
#define('_SPIP_LOCK_MODE',0); // ne pas utiliser de lock (deconseille)
#define('_SPIP_LOCK_MODE',1); // utiliser le flock php
#define('_SPIP_LOCK_MODE',2); // utiliser le nfslock de spip
@ -55,7 +59,10 @@ function spip_file_get_contents ($fichier) {
if (substr($fichier, -3) != '.gz') {
if (function_exists('file_get_contents')
AND (
($contenu = @file_get_contents ($fichier)) # windows retourne '' ?
// quand on est sous window on ne sait pas si file_get_contents marche
// on essaye : si ca retourne du contenu alors c'est bon
// sinon on fait un file() pour avoir le coeur net
($contenu = @file_get_contents ($fichier))
OR _OS_SERVEUR != 'windows')
)
return $contenu;
@ -71,21 +78,27 @@ function spip_file_get_contents ($fichier) {
// http://doc.spip.org/@lire_fichier
function lire_fichier ($fichier, &$contenu, $options=false) {
$contenu = '';
if (!@file_exists($fichier))
return false;
// inutile car si le fichier n'existe pas, le lock va renvoyer false juste apres
// economisons donc les acces disque
// if (!@file_exists($fichier))
// return false;
#spip_timer('lire_fichier');
if ($fl = @spip_fopen_lock($fichier, 'r', LOCK_SH)) {
// a-t-il ete supprime par le locker ?
if (!@file_exists($fichier)) {
// pas de @ sur spip_fopen_lock qui est silencieux de toute facon
if ($fl = spip_fopen_lock($fichier, 'r', LOCK_SH)) {
// lire le fichier avant tout
$contenu = spip_file_get_contents($fichier);
// le fichier a-t-il ete supprime par le locker ?
// on ne verifie que si la tentative de lecture a echoue
// pour discriminer un contenu vide d'un fichier absent
// et eviter un acces disque
if (!$contenu AND !@file_exists($fichier)) {
spip_fclose_unlock($fl);
return false;
}
// lire le fichier
$contenu = spip_file_get_contents($fichier);
// liberer le verrou
spip_fclose_unlock($fl);
@ -100,6 +113,7 @@ function lire_fichier ($fichier, &$contenu, $options=false) {
return $ok;
}
return false;
}
//
@ -273,11 +287,13 @@ function spip_unlink($f) {
//
// Retourne $base/${subdir}/ si le sous-repertoire peut etre cree,
// $base/${subdir}_ sinon ; $nobase signale qu'on ne veut pas de $base/
// On peut aussi ne donner qu'un seul argument,
// On peut aussi ne donner qu'un seul argument,
// subdir valant alors ce qui suit le dernier / dans $base
//
// http://doc.spip.org/@sous_repertoire
function sous_repertoire($base, $subdir='', $nobase = false, $tantpis=false) {
static $dirs = array();
$base = str_replace("//", "/", $base);
if (preg_match(',[/_]$,', $base)) $base = substr($base,0,-1);
if (!strlen($subdir)) {
@ -289,15 +305,19 @@ function sous_repertoire($base, $subdir='', $nobase = false, $tantpis=false) {
$base .= '/';
$subdir = str_replace("/", "", "$subdir");
}
if (isset($dirs[$base.$subdir]))
return $dirs[$base.$subdir];
$baseaff = $nobase ? '' : $base;
if (@file_exists("$base${subdir}.plat"))
return "$baseaff${subdir}_";;
if (_CREER_DIR_PLAT AND @file_exists("$base${subdir}.plat"))
return "$baseaff${subdir}_";;
$path = $base.$subdir; # $path = 'IMG/distant/pdf' ou 'IMG/distant_pdf'
if (file_exists("$path/.ok"))
return "$baseaff$subdir/";
return ($dirs[$base.$subdir] = "$baseaff$subdir/");
@mkdir($path, _SPIP_CHMOD);
@chmod($path, _SPIP_CHMOD);
@ -312,13 +332,12 @@ function sous_repertoire($base, $subdir='', $nobase = false, $tantpis=false) {
if ($ok) {
@touch ("$path/.ok");
spip_log("creation $base$subdir/");
return "$baseaff$subdir/";
return ($dirs[$base.$subdir] = "$baseaff$subdir/");
}
// en cas d'echec c'est peut etre tout simplement que le disque est plein :
// l'inode du fichier dir_test existe, mais impossible d'y mettre du contenu
// => sauf besoin express (define dans mes_options), ne pas creer le .plat
define('_CREER_DIR_PLAT', false);
if (_CREER_DIR_PLAT
AND $f = @fopen("$base${subdir}.plat", "w"))
fclose($f);
@ -331,7 +350,7 @@ function sous_repertoire($base, $subdir='', $nobase = false, $tantpis=false) {
raler_fichier($base . '/.ok');
}
spip_log("faux sous-repertoire $base${subdir}");
return "$baseaff${subdir}";
return ($dirs[$base.$subdirs] = "$baseaff${subdir}");
}
//

4
ecrire/public/composer.php

@ -132,8 +132,8 @@ function squelette_obsolete($skel, $squelette) {
// ne verifier la date de mes_fonctions et mes_options qu'une seule fois
// par hit
if (is_null($date_change)){
if (@spip_file_exists($fonc = 'mes_fonctions.php')
OR @spip_file_exists($fonc = 'mes_fonctions.php3'))
if (@file_exists($fonc = 'mes_fonctions.php')
OR @file_exists($fonc = 'mes_fonctions.php3'))
$date_change = @filemtime($fonc); # compatibilite
if (defined('_FILE_OPTIONS'))
$date_change = max($date_change,@filemtime(_FILE_OPTIONS));

Loading…
Cancel
Save