OSDN Git Service

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