OSDN Git Service

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