/** * purger un petit cache (tidy ou recherche) qui ne doit pas contenir de * vieux fichiers ; (cette fonction ne sert que dans des plugins obsoletes) * * http://code.spip.net/@nettoyer_petit_cache * * @param string $prefix * @param int $duree * @return void */ function nettoyer_petit_cache($prefix, $duree = 300) { // determiner le repertoire a purger : 'tmp/CACHE/rech/' $dircache = sous_repertoire(_DIR_CACHE, $prefix); if (spip_touch($dircache . 'purger_' . $prefix, $duree, true)) { foreach (preg_files($dircache, '[.]txt$') as $f) { if ($_SERVER['REQUEST_TIME'] - (@file_exists($f) ? @filemtime($f) : 0) > $duree) { spip_unlink($f); } } } }
/** * Une securite qui nous protege contre : * - les doubles validations de forums (derapages humains ou des brouteurs) * - les abus visant a mettre des forums malgre nous sur un article (??) * On installe un fichier temporaire dans _DIR_TMP (et pas _DIR_CACHE * afin de ne pas bugguer quand on vide le cache) * Le lock est leve au moment de l'insertion en base (inc-messforum) * Ce systeme n'est pas fonctionnel pour les forums sans previsu (notamment * si $afficher_previsu = 'non') * * http://code.spip.net/@forum_fichier_tmp * * @param $arg * @return int */ function forum_fichier_tmp($arg) { # astuce : mt_rand pour autoriser les hits simultanes while (($alea = time() + @mt_rand()) + intval($arg) and @file_exists($f = _DIR_TMP . "forum_{$alea}.lck")) { } spip_touch($f); # et maintenant on purge les locks de forums ouverts depuis > 4 h if ($dh = @opendir(_DIR_TMP)) { while (($file = @readdir($dh)) !== false) { if (preg_match('/^forum_([0-9]+)\\.lck$/', $file) and time() - @filemtime(_DIR_TMP . $file) > 4 * 3600) { spip_unlink(_DIR_TMP . $file); } } } return $alea; }
function cron ($gourmand=false, $taches= array()) { if (!defined(_CRON_DELAI_GOURMAND)) define('_CRON_DELAI_GOURMAND',60); if (!defined(_CRON_DELAI)) define('_CRON_DELAI',is_int($gourmand) ? $gourmand : 2); // Si on est gourmand, ou si le fichier gourmand n'existe pas // ou est trop vieux (> 60 sec), on va voir si un cron est necessaire. // Au passage si on est gourmand on le dit aux autres if (!_CRON_DELAI_GOURMAND OR spip_touch(_DIR_TMP.'cron.lock-gourmand', _CRON_DELAI_GOURMAND, $gourmand) OR ($gourmand!==false)) { // Le fichier cron.lock indique la date de la derniere tache // Il permet d'imposer qu'il n'y ait qu'une tache a la fois // et 2 secondes minimum entre chaque: // ca soulage le serveur et ca evite // les conflits sur la base entre taches. if (!_CRON_DELAI OR spip_touch(_DIR_TMP.'cron.lock',_CRON_DELAI)) { // Si base inaccessible, laisser tomber. if (!spip_connect()) return false; $genie = charger_fonction('genie', 'inc', true); if ($genie) { $genie($taches); // redater a la fin du cron // car il peut prendre plus de 2 secondes. spip_touch(_DIR_TMP.'cron.lock', 0); return true; } }# else spip_log("busy"); } return false; }