[SPIP] ~v3.0.20-->v3.0.25
[lhc/web/clavette_www.git] / www / ecrire / inc / log.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2016 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 if (!defined('_ECRIRE_INC_VERSION')) return;
14
15 function inc_log_dist($message, $logname=NULL, $logdir=NULL, $logsuf=NULL) {
16 static $test_repertoire = array();
17 static $compteur = array();
18 static $debugverb = ""; // pour ne pas le recalculer au reappel
19 global $nombre_de_logs, $taille_des_logs;
20
21 if (is_null($logname) OR !is_string($logname))
22 $logname = defined('_FILE_LOG') ? _FILE_LOG : 'spip';
23 if (!isset($compteur[$logname])) $compteur[$logname] = 0;
24 if ($logname != 'maj'
25 AND defined('_MAX_LOG')
26 AND (
27 $compteur[$logname]++ > _MAX_LOG
28 OR !$nombre_de_logs
29 OR !$taille_des_logs
30 ))
31 return;
32
33 $logfile = ($logdir===NULL ? _DIR_LOG : $logdir)
34 . ($logname)
35 . ($logsuf===NULL ? _FILE_LOG_SUFFIX : $logsuf);
36
37 if (!isset($test_repertoire[$d = dirname($logfile)])) {
38 $test_repertoire[$d] = false; // eviter une recursivite en cas d'erreur de sous_repertoire
39 $test_repertoire[$d] = (@is_dir($d)?true:(function_exists('sous_repertoire')?sous_repertoire($d, '', false, true):false));
40 }
41
42 // si spip_log() dans mes_options, ou repertoire log/ non present, poser dans tmp/
43 if (!defined('_DIR_LOG') OR !$test_repertoire[$d])
44 $logfile = _DIR_RACINE._NOM_TEMPORAIRES_INACCESSIBLES.$logname.'.log';
45
46 $rotate = 0;
47 $pid = '(pid '.@getmypid().')';
48
49 // accepter spip_log( Array )
50 if (!is_string($message)) $message = var_export($message, true);
51
52 if (!$debugverb AND defined('_LOG_FILELINE') AND _LOG_FILELINE){
53 $debug = debug_backtrace();
54 $l = $debug[1]['line'];
55 $fi = $debug[1]['file'];
56 if (strncmp($fi,_ROOT_RACINE,strlen(_ROOT_RACINE))==0)
57 $fi = substr($fi,strlen(_ROOT_RACINE));
58 $fu = isset($debug[2]['function']) ? $debug[2]['function'] : '';
59 $debugverb = "$fi:L$l:$fu"."():";
60 }
61
62 $m = date("Y-m-d H:i:s").' '.$GLOBALS['ip'].' '.$pid.' '
63 //distinguer les logs prives et publics dans les grep
64 . $debugverb
65 . (test_espace_prive()?':Pri:':':Pub:')
66 .preg_replace("/\n*$/", "\n", $message);
67
68
69 if (@is_readable($logfile)
70 AND (!$s = @filesize($logfile) OR $s > $taille_des_logs * 1024)) {
71 $rotate = $nombre_de_logs;
72 $m .= "[-- rotate --]\n";
73 }
74
75 $f = @fopen($logfile, "ab");
76 if ($f) {
77 fputs($f, (defined('_LOG_BRUT') AND _LOG_BRUT) ? $m : str_replace('<','&lt;',$m));
78 fclose($f);
79 }
80
81 if ($rotate-- > 0
82 AND function_exists('spip_unlink')) {
83 spip_unlink($logfile . '.' . $rotate);
84 while ($rotate--) {
85 @rename($logfile . ($rotate ? '.' . $rotate : ''), $logfile . '.' . ($rotate + 1));
86 }
87 }
88
89 // Dupliquer les erreurs specifiques dans le log general
90 if ($logname !== _FILE_LOG
91 AND defined('_FILE_LOG'))
92 inc_log_dist($logname=='maj' ? 'cf maj.log' : $message);
93 $debugverb = "";
94 }
95
96 ?>