From e39f6e5b05da98fa44ab3421467b777fbe89e8db Mon Sep 17 00:00:00 2001 From: Antoine Pitrou <pitrou@free.fr> Date: Sat, 9 Nov 2002 22:13:58 +0000 Subject: [PATCH] ecriture plus intelligente (?) du cache --- ecrire/inc_db_mysql.php3 | 3 +-- ecrire/inc_version.php3 | 4 ++-- inc-cache.php3 | 33 ++++++++++++++++++++++++++++----- inc-public-global.php3 | 29 ++++------------------------- 4 files changed, 35 insertions(+), 34 deletions(-) diff --git a/ecrire/inc_db_mysql.php3 b/ecrire/inc_db_mysql.php3 index 2ec2022c79..ca8559aa78 100644 --- a/ecrire/inc_db_mysql.php3 +++ b/ecrire/inc_db_mysql.php3 @@ -56,8 +56,7 @@ function traite_query($query) { $query = ereg_replace('([[:space:],])spip_', '\1'.$GLOBALS['table_prefix'].'_', $query) . $suite; // supprimer les INSERT DELAYED - if (! $GLOBALS['flag_mysql_delayed']) - $query = ereg_replace('^INSERT DELAYED ', 'INSERT ', $query); + $query = ereg_replace('^INSERT DELAYED ', 'INSERT ', $query); return $query; } diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3 index 6a1611aa1d..56c3f8ee24 100644 --- a/ecrire/inc_version.php3 +++ b/ecrire/inc_version.php3 @@ -74,8 +74,6 @@ $flag_strpos_3 = (@strpos('baba', 'a', 2) == 3); $flag_get_cfg_var = (@get_cfg_var('error_reporting') != ""); $flag_strtr2 = ($php_version_maj > 3); -$flag_mysql_delayed = false; // tant qu'on ne sait pas detecter si les INSERT DELAYED sont autorises... - if ($flag_function_exists) { $flag_ini_get = (function_exists("ini_get") && (@ini_get('max_execution_time') > 0)); // verifier pas desactivee @@ -91,6 +89,7 @@ if ($flag_function_exists) { $flag_sapi_name = function_exists("php_sapi_name"); $flag_utf8_decode = function_exists("utf8_decode"); $flag_ldap = function_exists("ldap_connect"); + $flag_flock = function_exists("flock"); } else { $flag_ini_get = false; @@ -104,6 +103,7 @@ else { $flag_sapi_name = false; $flag_utf8_decode = false; $flag_ldap = false; + $flag_flock = false; } diff --git a/inc-cache.php3 b/inc-cache.php3 index d69d2c105b..5e9fdd2063 100644 --- a/inc-cache.php3 +++ b/inc-cache.php3 @@ -12,23 +12,23 @@ define("_INC_CACHE", "1"); function generer_nom_fichier_cache($fichier_requete) { $md_cache = md5($fichier_requete); - + $fichier_cache = ereg_replace('^/+', '', $fichier_requete); $fichier_cache = ereg_replace('\.[a-zA-Z0-9]*', '', $fichier_cache); $fichier_cache = ereg_replace('&[^&]+=([^&]+)', '&\1', $fichier_cache); $fichier_cache = rawurlencode(strtr($fichier_cache, '/&-', '--_')); if (strlen($fichier_cache) > 24) $fichier_cache = substr(ereg_replace('([a-zA-Z]{1,3})[^-]*-', '\1-', $fichier_cache), -24); - + if (!$fichier_cache) $fichier_cache = 'INDEX-'; $fichier_cache .= '.'.substr($md_cache, 1, 6); - + $subdir_cache = substr($md_cache, 0, 1); - + if (creer_repertoire("CACHE", $subdir_cache)) $fichier_cache = "$subdir_cache/$fichier_cache"; - + return $fichier_cache; } @@ -69,6 +69,29 @@ function utiliser_cache($chemin_cache, $delais) { } +function ecrire_fichier_cache($fichier, $contenu) { + global $flag_flock; + + $fichier_tmp = $fichier.'_tmp'; + $f = fopen($fichier_tmp, "wb"); + if (!$f) return; + + // Essayer de poser un verrou + if ($flag_flock) { + @flock($f, 6, $r); + if ($r) return; + } + $r = fwrite($f, $contenu); + if ($flag_flock) @flock($f, 3); + if ($r != strlen($contenu)) return; + if (!fclose($f)) return; + + @unlink($fichier); + rename($fichier_tmp, $fichier); + if ($GLOBALS['flag_apc']) apc_rm($fichier); +} + + // // Retourne true si le sous-repertoire peut etre cree, false sinon // diff --git a/inc-public-global.php3 b/inc-public-global.php3 index dd0f4cf9ed..52ca946bd6 100644 --- a/inc-public-global.php3 +++ b/inc-public-global.php3 @@ -10,12 +10,6 @@ include_local ("inc-cache.php3"); // function inclure_fichier($fond, $delais, $contexte_inclus = "") { - static $seed = 0; - if (!$seed) { - $seed = (double) (microtime() + 1) * time(); - srand($seed); - } - $fichier_requete = $fond; if (is_array($contexte_inclus)) { reset($contexte_inclus); @@ -31,13 +25,8 @@ function inclure_fichier($fond, $delais, $contexte_inclus = "") { $fond = chercher_squelette($fond, $contexte_inclus['id_rubrique']); $page = calculer_page($fond, $contexte_inclus); if ($page) { - if ($GLOBALS['flag_apc']) { - apc_rm($chemin_cache); - } spip_log("calcul($delais): $chemin_cache"); - $f = fopen($chemin_cache, "wb"); - fwrite($f, $page); - fclose($f); + ecrire_fichier_cache($chemin_cache, $texte); } } return $chemin_cache; @@ -61,7 +50,7 @@ $use_cache = utiliser_cache($chemin_cache, $delais); if ($use_cache AND file_exists("ecrire/inc_meta_cache.php3")) { include_ecrire("inc_meta_cache.php3"); } -if (! defined("_ECRIRE_INC_META_CACHE")) { +if (!defined("_ECRIRE_INC_META_CACHE")) { include_ecrire("inc_meta.php3"); } @@ -114,13 +103,8 @@ if (!$use_cache) { $texte = "<"."?php @header (\"Location: $url\"); ?".">"; $calculer_cache = false; - if ($GLOBALS['flag_apc']) { - apc_rm($chemin_cache); - } spip_log("redirection: $url"); - $file = fopen($chemin_cache, "wb"); - fwrite($file, $texte); - fclose($file); + ecrire_fichier_cache($chemin_cache, $texte); } } @@ -128,13 +112,8 @@ if (!$use_cache) { include_local ("inc-calcul.php3"); $page = calculer_page_globale($fond); if ($page) { - if ($GLOBALS['flag_apc']) { - apc_rm($chemin_cache); - } spip_log("calcul($delais): $chemin_cache"); - $file = fopen($chemin_cache, "wb"); - fwrite($file, $page); - fclose($file); + ecrire_fichier_cache($chemin_cache, $page); } } } -- GitLab