source: spip-zone/_plugins_/doubleclick/doubleclick_fonctions.php @ 111365

Last change on this file since 111365 was 83944, checked in by camille.sauvage@…, 7 years ago

Import initial

File size: 2.4 KB
Line 
1<?php
2/**
3 * Fonctions utiles au plugin Double Click
4 *
5 * @plugin     Double Click
6 * @copyright  2014
7 * @author     Camille Sauvage
8 * @licence    GNU/GPL
9 * @package    SPIP\Doubleclick\Fonctions
10 */
11
12if (!defined('_ECRIRE_INC_VERSION')) return;
13include_spip('inc/config');
14
15/**
16 * Une securite qui nous protege contre :
17 * - les doubles validations de forums (derapages humains ou des brouteurs)
18 * - les abus visant a mettre des forums malgre nous sur un article (??)
19 * On installe un fichier temporaire dans _DIR_TMP/spool (et pas _DIR_CACHE
20 * afin de ne pas bugguer quand on vide le cache)
21 * Le lock est leve au moment de l'appel à la fonction traiter()
22 *
23 * @return int
24 */
25function doubleclick_cree_lock() {
26        // on vérifie l'existence du répertoire de spool
27        if (file_exists(_DIR_TMP . '/spool') == false) {
28                mkdir(_DIR_TMP . '/spool');
29        }
30       
31        // on calcule un hash complet dépendant du temps + aléa
32        while (($hash = md5(lire_config('doubleclick/secret') . ($alea = time()+@mt_rand())))
33                AND @file_exists($f = _DIR_TMP . "/spool/doubleclick_$hash.lck"));
34       
35        // on crée le fichier
36        spip_touch($f);
37       
38        // et maintenant on purge les locks de forums ouverts depuis > 4 h
39        $file_dates = array();
40       
41        if ($dh = @opendir(_DIR_TMP . '/spool')){
42                while (($file = @readdir($dh))!==false){
43                        if (preg_match('/^doubleclick_\S+?\.lck$/', $file)) {
44                                $cpt_lock++;
45                                $file_dates[$file] = @filemtime(_DIR_TMP . "spool/$file");
46                                if ((time() - $file_dates[$file]) > 4*3600) {
47                                        spip_unlink(_DIR_TMP . "spool/$file");
48                                        unset($file_dates[$file]);
49                                }
50                        }
51                }
52        }
53       
54        // on supprime les anciens fichiers surnuméraires
55        $max_spool = intval(lire_config('doubleclick/taille_spool'));
56        if ($max_spool == 0) $max_spool = 500;
57       
58        // Est-ce qu'on a encore trop de fichiers ?
59        if (count($file_dates) > $max_spool) {
60                asort($file_dates, SORT_NUMERIC);
61               
62                foreach ($file_dates as $file => $date) {
63                        spip_unlink(_DIR_TMP . "spool/$file");
64                        unset($file_dates[$file]);
65                        if (count($file_dates) <= $max_spool) break;
66                }
67        }
68       
69        return $alea;
70}
71
72function doubleclick_supprime_lock($alea) {
73        $hash = md5(lire_config('doubleclick/secret') . $alea);
74        $file = _DIR_TMP . "spool/doubleclick_$hash.lck";
75        spip_unlink($file);
76}
77
78function doubleclick_existe_lock($alea) {
79        $hash = md5(lire_config('doubleclick/secret') . $alea);
80        $file = _DIR_TMP . "spool/doubleclick_$hash.lck";
81
82        return @file_exists($file);
83}
84
85?>
Note: See TracBrowser for help on using the repository browser.