diff --git a/ecrire/inc_config.php3 b/ecrire/inc_config.php3 index 0c80ed58c7db3ec80cf3b3022c912832c5ffe53a..74f40e4bbc3d577981286bde32329f6173831eb8 100644 --- a/ecrire/inc_config.php3 +++ b/ecrire/inc_config.php3 @@ -170,7 +170,7 @@ function appliquer_modifs_config() { } // Activer le moteur : dresser la liste des choses a indexer - if ($activer_moteur == 'oui') { + if ($activer_moteur == 'oui' AND ($activer_moteur != lire_meta("activer_moteur"))) { include_ecrire('inc_index.php3'); creer_liste_indexation(); } @@ -203,7 +203,7 @@ function appliquer_modifs_config() { 'creer_preview', 'taille_preview', 'articles_modif', - + 'activer_sites', 'proposer_sites', 'activer_syndic', @@ -270,7 +270,6 @@ function appliquer_modifs_config() { fin_admin($admin); } - if ($purger_skel) { $hash = calculer_action_auteur("purger_squelettes"); @header ("Location:../spip_cache.php3?purger_squelettes=oui&id_auteur=$connect_id_auteur&hash=$hash&redirect=".urlencode($clean_link->getUrl())); diff --git a/ecrire/inc_index.php3 b/ecrire/inc_index.php3 index 8fe7cda0076b2a9e0e2fc506289d96c6eec20255..ff97c09565d6b995d14f23d75aceeadf78ebe728 100644 --- a/ecrire/inc_index.php3 +++ b/ecrire/inc_index.php3 @@ -71,8 +71,8 @@ function indexer_chaine($texte, $val = 1, $min_long = 3) { function deja_indexe($type, $id_objet) { $table_index = 'spip_index_'.$type.'s'; $col_id = 'id_'.$type; - $query = "SELECT COUNT(*) FROM $table_index WHERE $col_id=$id_objet"; - list($n) = @spip_fetch_array(@spip_query($query)); + $query = "SELECT $col_id FROM $table_index WHERE $col_id=$id_objet LIMIT 0,1"; + $n = @spip_num_rows(@spip_query($query)); return ($n > 0); } diff --git a/ecrire/inc_sites.php3 b/ecrire/inc_sites.php3 index 25a5f37d63b444fafdd66162e63bbee4e68b2f82..8620230ea126924c98efa292e67e5cb55bed5576 100644 --- a/ecrire/inc_sites.php3 +++ b/ecrire/inc_sites.php3 @@ -154,7 +154,7 @@ function syndic_a_jour($now_id_syndic, $statut = 'off') { $moderation = 'publie'; // en ligne sans validation // Section critique : n'autoriser qu'une seule syndication simultanee pour un site donne - if (!timeout("syndication $url_syndic")) return; + if (!spip_get_lock("syndication $url_syndic")) return; include_ecrire("inc_filtres.php3"); spip_query("UPDATE spip_syndic SET syndication='$statut', date_syndic=NOW() WHERE id_syndic='$now_id_syndic'"); diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3 index 7c23903220dfffa58f5e62b590b9e44a7125756a..a89b8cedd85d0fad7a66d0dfca76c0a800fc1426 100644 --- a/ecrire/inc_version.php3 +++ b/ecrire/inc_version.php3 @@ -809,7 +809,7 @@ function spip_log($message) { // Savoir si on peut lancer de gros calculs, et eventuellement poser un lock // Resultat : true=vas-y ; false=stop // -function timeout ($lock=false, $action=true, $connect_mysql=true) { +function timeout($lock=false, $action=true, $connect_mysql=true) { static $ok = true; global $db_ok, $dir_ecrire; @@ -822,30 +822,28 @@ function timeout ($lock=false, $action=true, $connect_mysql=true) { } // Ne rien faire ? - if (!$action) + if (!$action || !$ok) return $ok; + $ok = false; + // Base connectee ? if ($connect_mysql) { include_ecrire('inc_connect.php3'); if (!$db_ok) - return $ok = false; + return false; - // Lock SQL ? + // Verrou demande ? if ($lock) { - if (spip_get_lock($lock)) { - // C'est bon - $ok = false; - return true; - } else { + spip_debug("test lock mysql $lock"); + if (!spip_get_lock($lock)) { spip_debug ("lock mysql $lock"); - return $ok = false; + return false; } } } // C'est bon - $ok = false; return true; } diff --git a/ecrire/index.php3 b/ecrire/index.php3 index 4fb62f4ae4a048a689d6ea38abdfebe64b10502d..e059d4c1ae448732714abe758476b872bfa8c9e3 100644 --- a/ecrire/index.php3 +++ b/ecrire/index.php3 @@ -455,11 +455,13 @@ if (abs($t_jour - date('d')) > 2) { // // Optimisation periodique de la base de donnees // -if (!$bonjour AND timeout('optimisation')) { +if (!$bonjour) { if ($optimiser == 'oui' || (time() - lire_meta('date_optimisation')) > 24 * 3600) { - ecrire_meta("date_optimisation", time()); - ecrire_metas(); - include ("optimiser.php3"); + if (timeout('optimisation')) { + ecrire_meta("date_optimisation", time()); + ecrire_metas(); + include ("optimiser.php3"); + } } } diff --git a/ecrire/spip_style.php3 b/ecrire/spip_style.php3 index 76df4787e1d592862c12eb8c43f3a737de612267..4a3d5021821263a243829e4b632df07fcbf5a52a 100644 --- a/ecrire/spip_style.php3 +++ b/ecrire/spip_style.php3 @@ -1,7 +1,8 @@ <?php - @header ("Content-Type: text/css"); - @Header ("Expires: ".gmdate("D, d M Y H:i:s", time() + 3600)." GMT"); include ("inc_version.php3"); // pour le register_globals + @Header ("Content-Type: text/css"); + @Header ("Expires: ".gmdate("D, d M Y H:i:s", time() + 7 * 24 * 3600)." GMT"); + @Header ("Last-Modified: ".gmdate("D, d M Y H:i:s", @filemtime("spip_style.php3"))." GMT"); if (!isset($couleur_claire)) $couleur_claire = "#EDF3FE"; if (!isset($couleur_foncee)) diff --git a/inc-cache.php3 b/inc-cache.php3 index 573346953ed26af2f04185a9dbbecf3eafa5d77c..decea6e3cffd417af41d9ec6e4dc0767eae6a24a 100644 --- a/inc-cache.php3 +++ b/inc-cache.php3 @@ -52,13 +52,10 @@ function utiliser_cache($chemin_cache, $delais) { if (file_exists($chemin_cache.'.NEW')) { // Deuxieme acces : le fichier est marque comme utilise @rename($chemin_cache.'.NEW', $chemin_cache); - clearstatcache(); - } - else { - // Double verification (cas renommage entre les deux file_exists) - clearstatcache(); - $use_cache = file_exists($chemin_cache); } + // Double verification (cas renommage/suppression entre les deux file_exists) + clearstatcache(); + $use_cache = file_exists($chemin_cache); } // Date de creation du fichier @@ -67,7 +64,7 @@ function utiliser_cache($chemin_cache, $delais) { $age = time() - $t; $age_ok = (($age < $delais) AND ($age >= 0)); if (!$age_ok) { // fichier cache trop vieux - if (timeout()) // sauf lock hebergeur ou probleme base + if (timeout(false, false)) // sauf lock hebergeur ou probleme base $use_cache = false; } // Inclusions multiples : derniere modification diff --git a/inc-public-global.php3 b/inc-public-global.php3 index 476682edb09a6ab2f3a65c5d7929006fdbe6d0b6..3c95f672903efa9eebb7e084e3b44a6be28da22c 100644 --- a/inc-public-global.php3 +++ b/inc-public-global.php3 @@ -372,22 +372,21 @@ if (lire_meta('activer_moteur') == 'oui') { } } } - if ($use_cache AND file_exists($fichier_index) AND filesize($fichier_index)) { - if (timeout()) { - include_ecrire("inc_texte.php3"); - include_ecrire("inc_filtres.php3"); - include_ecrire("inc_index.php3"); - if ($s = sizeof($suite = file($fichier_index))) - $s = $suite[rand(0,$s)]; - $pid = @getmypid(); - $f = fopen($fichier_index.".tmp-$pid", 'w'); - while (list(,$ligne) = each($suite)) - if ($ligne <> $s) - fwrite($f, $ligne); - fclose($f); - @rename($fichier_index.".tmp-$pid",$fichier_index); - $s = explode(' ', trim($s)); - indexer_objet($s[0], $s[1], $s[2]); + if ($use_cache AND file_exists($fichier_index)) { + if (timeout('indexation')) { + if ($s = sizeof($suite = file($fichier_index))) { + include_ecrire("inc_texte.php3"); + include_ecrire("inc_filtres.php3"); + include_ecrire("inc_index.php3"); + $s = $suite[$n = rand(0, $s)]; + unset($suite[$n]); + $f = fopen($fichier_index, 'wb'); + fwrite($f, join("", $suite)); + fclose($f); + $s = explode(' ', trim($s)); + indexer_objet($s[0], $s[1], $s[2]); + } + else @unlink($fichier_index); } } } @@ -398,14 +397,16 @@ if (lire_meta('activer_moteur') == 'oui') { // if ($db_ok AND lire_meta("activer_syndic") != "non") { - include_ecrire("inc_texte.php3"); - include_ecrire("inc_filtres.php3"); - include_ecrire("inc_sites.php3"); - include_ecrire("inc_index.php3"); - - executer_une_syndication(); - if (lire_meta('activer_moteur') == 'oui' AND timeout()) - executer_une_indexation_syndic(); + if (timeout()) { + include_ecrire("inc_texte.php3"); + include_ecrire("inc_filtres.php3"); + include_ecrire("inc_sites.php3"); + include_ecrire("inc_index.php3"); + + executer_une_syndication(); + if (lire_meta('activer_moteur') == 'oui' AND timeout()) + executer_une_indexation_syndic(); + } }