4 * PukiWiki - Yet another WikiWikiWeb clone.
8 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò´ÉÍý¤¹¤ë
10 * @package org.pukiwiki
14 * @version $Id: backup.php,v 1.4 2004/10/21 12:55:50 henoheno Exp $
19 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¤òºîÀ®¤¹¤ë
22 * @param String $page ¥Ú¡¼¥¸Ì¾
23 * @param Boolean $delete TRUE:¥Ð¥Ã¥¯¥¢¥Ã¥×¤òºï½ü¤¹¤ë
27 function make_backup($page, $delete = FALSE)
29 global $splitter, $cycle, $maxage;
30 global $do_backup, $del_backup;
32 if (! $do_backup) return;
34 if ($del_backup && $delete) {
35 _backup_delete($page);
39 if (! is_page($page)) return;
41 $lastmod = _backup_get_filetime($page);
42 if ($lastmod == 0 || UTIME - $lastmod > 60 * 60 * $cycle)
44 $backups = get_backup($page);
45 $count = count($backups) + 1;
47 // ľ¸å¤Ë1·ïÄɲ乤ë¤Î¤Ç¡¢(ºÇÂç·ï¿ô - 1)¤òĶ¤¨¤ëÍ×ÁǤò¼Î¤Æ¤ë
49 array_splice($backups, 0, $count - $maxage);
52 foreach($backups as $age=>$data) {
53 $strout .= "$splitter {$data['time']}\n";
54 $strout .= join('', $data['data']);
56 $strout = preg_replace("/([^\n])\n*$/", "$1\n", $strout);
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);
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);
74 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò¼èÆÀ¤¹¤ë
75 * $age = 0¤Þ¤¿¤Ï¾Êά : Á´¤Æ¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ç¡¼¥¿¤òÇÛÎó¤Ç¼èÆÀ¤¹¤ë
76 * $age > 0 : »ØÄꤷ¤¿À¤Âå¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ç¡¼¥¿¤ò¼èÆÀ¤¹¤ë
79 * @param String $page ¥Ú¡¼¥¸Ì¾
80 * @param Integer $age ¥Ð¥Ã¥¯¥¢¥Ã¥×¤ÎÀ¤ÂåÈÖ¹æ ¾Êά»þ¤ÏÁ´¤Æ
82 * @return String ¥Ð¥Ã¥¯¥¢¥Ã¥× ($age != 0)
83 * Array ¥Ð¥Ã¥¯¥¢¥Ã¥×¤ÎÇÛÎó ($age == 0)
85 function get_backup($page, $age = 0)
89 $lines = _backup_file($page);
90 if (! is_array($lines)) return array();
93 $retvars = $match = array();
94 foreach($lines as $line) {
95 if (preg_match("/^$splitter\s(\d+)$/", $line, $match)) {
97 if ($age > 0 && $_age > $age)
98 return $retvars[$age];
100 $retvars[$_age] = array('time'=>$match[1], 'data'=>array());
102 $retvars[$_age]['data'][] = $line;
110 * _backup_get_filename
111 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë̾¤ò¼èÆÀ¤¹¤ë
114 * @param String $page ¥Ú¡¼¥¸Ì¾
116 * @return String ¥Ð¥Ã¥¯¥¢¥Ã¥×¤Î¥Õ¥¡¥¤¥ë̾
118 function _backup_get_filename($page)
120 return BACKUP_DIR . encode($page) . BACKUP_EXT;
124 * _backup_file_exists
125 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤¹¤ë¤«
128 * @param String $page ¥Ú¡¼¥¸Ì¾
130 * @return Boolean TRUE:¤¢¤ë FALSE:¤Ê¤¤
132 function _backup_file_exists($page)
134 return file_exists(_backup_get_filename($page));
138 * _backup_get_filetime
139 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤Î¹¹¿·»þ¹ï¤òÆÀ¤ë
142 * @param String $page ¥Ú¡¼¥¸Ì¾
144 * @return Integer ¥Õ¥¡¥¤¥ë¤Î¹¹¿·»þ¹ï(GMT)
147 function _backup_get_filetime($page)
149 return _backup_file_exists($page) ?
150 filemtime(_backup_get_filename($page)) - LOCALZONE : 0;
155 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òºï½ü¤¹¤ë
158 * @param String $page ¥Ú¡¼¥¸Ì¾
160 * @return Boolean FALSE:¼ºÇÔ
162 function _backup_delete($page)
164 return unlink(_backup_get_filename($page));
167 /////////////////////////////////////////////////
169 if (extension_loaded('zlib')) {
170 // ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à´Ø¿ô
172 define('BACKUP_EXT', '.gz');
176 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤ò³«¤¯
179 * @param String $page ¥Ú¡¼¥¸Ì¾
180 * @param String $mode ¥â¡¼¥É
182 * @return Boolean FALSE:¼ºÇÔ
184 function _backup_fopen($page, $mode)
186 return gzopen(_backup_get_filename($page), $mode);
191 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤Ë½ñ¤¹þ¤à
194 * @param Integer $zp ¥Õ¥¡¥¤¥ë¥Ý¥¤¥ó¥¿
195 * @param String $str ʸ»úÎó
197 * @return Boolean FALSE:¼ºÇÔ ¤½¤Î¾:½ñ¤¹þ¤ó¤À¥Ð¥¤¥È¿ô
199 function _backup_fputs($zp, $str)
201 return gzputs($zp, $str);
206 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òÊĤ¸¤ë
209 * @param Integer $zp ¥Õ¥¡¥¤¥ë¥Ý¥¤¥ó¥¿
211 * @return Boolean FALSE:¼ºÇÔ
213 function _backup_fclose($zp)
220 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤ÎÆâÍƤò¼èÆÀ¤¹¤ë
223 * @param String $page ¥Ú¡¼¥¸Ì¾
225 * @return Array ¥Õ¥¡¥¤¥ë¤ÎÆâÍÆ
227 function _backup_file($page)
229 return _backup_file_exists($page) ?
230 gzfile(_backup_get_filename($page)) :
234 /////////////////////////////////////////////////
237 // ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à´Ø¿ô
238 define('BACKUP_EXT', '.txt');
242 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤ò³«¤¯
245 * @param String $page ¥Ú¡¼¥¸Ì¾
246 * @param String $mode ¥â¡¼¥É
248 * @return Boolean FALSE:¼ºÇÔ
250 function _backup_fopen($page, $mode)
252 return fopen(_backup_get_filename($page), $mode);
257 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤Ë½ñ¤¹þ¤à
260 * @param Integer $zp ¥Õ¥¡¥¤¥ë¥Ý¥¤¥ó¥¿
261 * @param String $str ʸ»úÎó
263 * @return Boolean FALSE:¼ºÇÔ ¤½¤Î¾:½ñ¤¹þ¤ó¤À¥Ð¥¤¥È¿ô
265 function _backup_fputs($zp, $str)
267 return fputs($zp, $str);
272 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òÊĤ¸¤ë
275 * @param Integer $zp ¥Õ¥¡¥¤¥ë¥Ý¥¤¥ó¥¿
277 * @return Boolean FALSE:¼ºÇÔ
279 function _backup_fclose($zp)
286 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤ÎÆâÍƤò¼èÆÀ¤¹¤ë
289 * @param String $page ¥Ú¡¼¥¸Ì¾
291 * @return Array ¥Õ¥¡¥¤¥ë¤ÎÆâÍÆ
293 function _backup_file($page)
295 return _backup_file_exists($page) ?
296 file(_backup_get_filename($page)) :