예제 #1
0
/**
 * 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);
            }
        }
    }
}
예제 #2
0
파일: forum.php 프로젝트: genma/spip_ynh
/**
 * 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;
}
예제 #3
0
파일: utils.php 프로젝트: rhertzog/lcs
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;
}