OSDN Git Service

BugTrack2/62: Do remove the whole design, 'Showing TrackBack-ping list by html'.
[pukiwiki/pukiwiki.git] / lib / backup.php
1 <?php
2 /**
3  *
4  * PukiWiki - Yet another WikiWikiWeb clone.
5  *
6  * backup.php
7  *
8  * ¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò´ÉÍý¤¹¤ë
9  *
10  * @package org.pukiwiki
11  * @access  public
12  * @author
13  * @create
14  * @version $Id: backup.php,v 1.9 2005/04/30 05:21:00 henoheno Exp $
15  * Copyright (C)
16  *   2002-2005 PukiWiki Developers Team
17  *   2001-2002 Originally written by yu-ji
18  * License: GPL v2 or (at your option) any later version
19  **/
20
21 /**
22  * make_backup
23  * ¥Ð¥Ã¥¯¥¢¥Ã¥×¤òºîÀ®¤¹¤ë
24  *
25  * @access    public
26  * @param     String    $page        ¥Ú¡¼¥¸Ì¾
27  * @param     Boolean   $delete      TRUE:¥Ð¥Ã¥¯¥¢¥Ã¥×¤òºï½ü¤¹¤ë
28  *
29  * @return    Void
30  */
31
32 function make_backup($page, $delete = FALSE)
33 {
34         global $cycle, $maxage;
35         global $do_backup, $del_backup;
36
37         if (PKWK_READONLY || ! $do_backup) return;
38
39         if ($del_backup && $delete) {
40                 _backup_delete($page);
41                 return;
42         }
43
44         if (! is_page($page)) return;
45
46         $lastmod = _backup_get_filetime($page);
47         if ($lastmod == 0 || UTIME - $lastmod > 60 * 60 * $cycle)
48         {
49                 $backups = get_backup($page);
50                 $count   = count($backups) + 1;
51
52                 // Ä¾¸å¤Ë1·ïÄɲ乤ë¤Î¤Ç¡¢(ºÇÂç·ï¿ô - 1)¤òĶ¤¨¤ëÍ×ÁǤò¼Î¤Æ¤ë
53                 if ($count > $maxage)
54                         array_splice($backups, 0, $count - $maxage);
55
56                 $strout = '';
57                 foreach($backups as $age=>$data) {
58                         $strout .= PKWK_SPLITTER . ' ' . $data['time'] . "\n"; // Splitter format
59                         $strout .= join('', $data['data']);
60                 }
61                 $strout = preg_replace("/([^\n])\n*$/", "$1\n", $strout);
62
63                 // Escape 'lines equal to PKWK_SPLITTER', by inserting a space
64                 $body = preg_replace('/^(' . preg_quote(PKWK_SPLITTER) . "\s\d+)$/", '$1 ', get_source($page));
65                 $body = PKWK_SPLITTER . ' ' . get_filetime($page) . "\n" . join('', $body);
66                 $body = preg_replace("/\n*$/", "\n", $body);
67
68                 $fp = _backup_fopen($page, 'wb')
69                         or die_message('cannot write file ' . htmlspecialchars($realfilename) .
70                         '<br />maybe permission is not writable or filename is too long');
71                 _backup_fputs($fp, $strout);
72                 _backup_fputs($fp, $body);
73                 _backup_fclose($fp);
74         }
75 }
76
77 /**
78  * get_backup
79  * ¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò¼èÆÀ¤¹¤ë
80  * $age = 0¤Þ¤¿¤Ï¾Êά : Á´¤Æ¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ç¡¼¥¿¤òÇÛÎó¤Ç¼èÆÀ¤¹¤ë
81  * $age > 0           : »ØÄꤷ¤¿À¤Âå¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ç¡¼¥¿¤ò¼èÆÀ¤¹¤ë
82  *
83  * @access    public
84  * @param     String    $page        ¥Ú¡¼¥¸Ì¾
85  * @param     Integer   $age         ¥Ð¥Ã¥¯¥¢¥Ã¥×¤ÎÀ¤ÂåÈֹ栾Êά»þ¤ÏÁ´¤Æ
86  *
87  * @return    String    ¥Ð¥Ã¥¯¥¢¥Ã¥×       ($age != 0)
88  *            Array     ¥Ð¥Ã¥¯¥¢¥Ã¥×¤ÎÇÛÎó ($age == 0)
89  */
90 function get_backup($page, $age = 0)
91 {
92         $lines = _backup_file($page);
93         if (! is_array($lines)) return array();
94
95         $_age = 0;
96         $retvars = $match = array();
97         $regex_splitter = '/^' . preg_quote(PKWK_SPLITTER) . '\s(\d+)$/';
98         foreach($lines as $line) {
99                 if (preg_match($regex_splitter, $line, $match)) {
100                         ++$_age;
101                         if ($age > 0 && $_age > $age)
102                                 return $retvars[$age];
103
104                         $retvars[$_age] = array('time'=>$match[1], 'data'=>array());
105                 } else {
106                         $retvars[$_age]['data'][] = $line;
107                 }
108         }
109
110         return $retvars;
111 }
112
113 /**
114  * _backup_get_filename
115  * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë̾¤ò¼èÆÀ¤¹¤ë
116  *
117  * @access    private
118  * @param     String    $page        ¥Ú¡¼¥¸Ì¾
119  *
120  * @return    String    ¥Ð¥Ã¥¯¥¢¥Ã¥×¤Î¥Õ¥¡¥¤¥ë̾
121  */
122 function _backup_get_filename($page)
123 {
124         return BACKUP_DIR . encode($page) . BACKUP_EXT;
125 }
126
127 /**
128  * _backup_file_exists
129  * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤¹¤ë¤«
130  *
131  * @access    private
132  * @param     String    $page        ¥Ú¡¼¥¸Ì¾
133  *
134  * @return    Boolean   TRUE:¤¢¤ë FALSE:¤Ê¤¤
135  */
136 function _backup_file_exists($page)
137 {
138         return file_exists(_backup_get_filename($page));
139 }
140
141 /**
142  * _backup_get_filetime
143  * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤Î¹¹¿·»þ¹ï¤òÆÀ¤ë
144  *
145  * @access    private
146  * @param     String    $page        ¥Ú¡¼¥¸Ì¾
147  *
148  * @return    Integer   ¥Õ¥¡¥¤¥ë¤Î¹¹¿·»þ¹ï(GMT)
149  */
150
151 function _backup_get_filetime($page)
152 {
153         return _backup_file_exists($page) ?
154                 filemtime(_backup_get_filename($page)) - LOCALZONE : 0;
155 }
156
157 /**
158  * _backup_delete
159  * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òºï½ü¤¹¤ë
160  *
161  * @access    private
162  * @param     String    $page        ¥Ú¡¼¥¸Ì¾
163  *
164  * @return    Boolean   FALSE:¼ºÇÔ
165  */
166 function _backup_delete($page)
167 {
168         return unlink(_backup_get_filename($page));
169 }
170
171 /////////////////////////////////////////////////
172
173 if (extension_loaded('zlib')) {
174         // ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à´Ø¿ô
175         // zlib´Ø¿ô¤ò»ÈÍÑ
176         define('BACKUP_EXT', '.gz');
177
178 /**
179  * _backup_fopen
180  * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤ò³«¤¯
181  *
182  * @access    private
183  * @param     String    $page        ¥Ú¡¼¥¸Ì¾
184  * @param     String    $mode        ¥â¡¼¥É
185  *
186  * @return    Boolean   FALSE:¼ºÇÔ
187  */
188         function _backup_fopen($page, $mode)
189         {
190                 return gzopen(_backup_get_filename($page), $mode);
191         }
192
193 /**
194  * _backup_fputs
195  * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤Ë½ñ¤­¹þ¤à
196  *
197  * @access    private
198  * @param     Integer   $zp          ¥Õ¥¡¥¤¥ë¥Ý¥¤¥ó¥¿
199  * @param     String    $str         Ê¸»úÎó
200  *
201  * @return    Boolean   FALSE:¼ºÇÔ ¤½¤Î¾:½ñ¤­¹þ¤ó¤À¥Ð¥¤¥È¿ô
202  */
203         function _backup_fputs($zp, $str)
204         {
205                 return gzputs($zp, $str);
206         }
207
208 /**
209  * _backup_fclose
210  * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òÊĤ¸¤ë
211  *
212  * @access    private
213  * @param     Integer   $zp          ¥Õ¥¡¥¤¥ë¥Ý¥¤¥ó¥¿
214  *
215  * @return    Boolean   FALSE:¼ºÇÔ
216  */
217         function _backup_fclose($zp)
218         {
219                 return gzclose($zp);
220         }
221
222 /**
223  * _backup_file
224  * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤ÎÆâÍƤò¼èÆÀ¤¹¤ë
225  *
226  * @access    private
227  * @param     String    $page        ¥Ú¡¼¥¸Ì¾
228  *
229  * @return    Array     ¥Õ¥¡¥¤¥ë¤ÎÆâÍÆ
230  */
231         function _backup_file($page)
232         {
233                 return _backup_file_exists($page) ?
234                         gzfile(_backup_get_filename($page)) :
235                         array();
236         }
237 }
238 /////////////////////////////////////////////////
239 else
240 {
241         // ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à´Ø¿ô
242         define('BACKUP_EXT', '.txt');
243
244 /**
245  * _backup_fopen
246  * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤ò³«¤¯
247  *
248  * @access    private
249  * @param     String    $page        ¥Ú¡¼¥¸Ì¾
250  * @param     String    $mode        ¥â¡¼¥É
251  *
252  * @return    Boolean   FALSE:¼ºÇÔ
253  */
254         function _backup_fopen($page, $mode)
255         {
256                 return fopen(_backup_get_filename($page), $mode);
257         }
258
259 /**
260  * _backup_fputs
261  * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤Ë½ñ¤­¹þ¤à
262  *
263  * @access    private
264  * @param     Integer   $zp          ¥Õ¥¡¥¤¥ë¥Ý¥¤¥ó¥¿
265  * @param     String    $str         Ê¸»úÎó
266  *
267  * @return    Boolean   FALSE:¼ºÇÔ ¤½¤Î¾:½ñ¤­¹þ¤ó¤À¥Ð¥¤¥È¿ô
268  */
269         function _backup_fputs($zp, $str)
270         {
271                 return fputs($zp, $str);
272         }
273
274 /**
275  * _backup_fclose
276  * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òÊĤ¸¤ë
277  *
278  * @access    private
279  * @param     Integer   $zp          ¥Õ¥¡¥¤¥ë¥Ý¥¤¥ó¥¿
280  *
281  * @return    Boolean   FALSE:¼ºÇÔ
282  */
283         function _backup_fclose($zp)
284         {
285                 return fclose($zp);
286         }
287
288 /**
289  * _backup_file
290  * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤ÎÆâÍƤò¼èÆÀ¤¹¤ë
291  *
292  * @access    private
293  * @param     String    $page        ¥Ú¡¼¥¸Ì¾
294  *
295  * @return    Array     ¥Õ¥¡¥¤¥ë¤ÎÆâÍÆ
296  */
297         function _backup_file($page)
298         {
299                 return _backup_file_exists($page) ?
300                         file(_backup_get_filename($page)) :
301                         array();
302         }
303 }
304 ?>