OSDN Git Service

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