4 * PukiWiki - Yet another WikiWikiWeb clone.
8 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò´ÉÍý¤¹¤ë
10 * @package org.pukiwiki
14 * @version $Id: backup.php,v 1.2 2004/08/01 13:39:35 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;
37 if ($del_backup and $delete)
48 $lastmod = backup_get_filetime($page);
49 if (($lastmod == 0) or (UTIME - $lastmod) > (60 * 60 * $cycle))
51 $backups = get_backup($page);
52 $count = count($backups) + 1;
55 //ľ¸å¤Ë1·ïÄɲ乤ë¤Î¤Ç¡¢(ºÇÂç·ï¿ô-1)¤òĶ¤¨¤ëÍ×ÁǤò¼Î¤Æ¤ë
56 array_splice($backups,0,$count - $maxage);
60 foreach($backups as $age=>$data)
62 $strout .= "$splitter {$data['time']}\n";
63 $strout .= join('',$data['data']);
65 $strout = preg_replace("/([^\n])\n*$/","$1\n",$strout);
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);
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);
82 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò¼èÆÀ¤¹¤ë
83 * $age=0¤Þ¤¿¤Ï¾Êά : Á´¤Æ¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ç¡¼¥¿¤òÇÛÎó¤Ç¼èÆÀ¤¹¤ë
84 * $age>0 : »ØÄꤷ¤¿À¤Âå¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ç¡¼¥¿¤ò¼èÆÀ¤¹¤ë
87 * @param String $page ¥Ú¡¼¥¸Ì¾
88 * @param Integer $age ¥Ð¥Ã¥¯¥¢¥Ã¥×¤ÎÀ¤ÂåÈÖ¹æ ¾Êά»þ¤ÏÁ´¤Æ
90 * @return String ¥Ð¥Ã¥¯¥¢¥Ã¥×($age!=0)
91 * Array ¥Ð¥Ã¥¯¥¢¥Ã¥×¤ÎÇÛÎó($age==0)
93 function get_backup($page,$age = 0)
97 $lines = backup_file($page);
99 if (!is_array($lines))
105 $retvars = $match = array();
106 foreach($lines as $line)
108 if (preg_match("/^$splitter\s(\d+)$/", $line, $match)) {
110 if ($age > 0 and $_age > $age) {
111 return $retvars[$age];
113 $retvars[$_age] = array('time'=>$match[1], 'data'=>array());
115 $retvars[$_age]['data'][] = $line;
123 * backup_get_filename
124 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë̾¤ò¼èÆÀ¤¹¤ë
127 * @param String $page ¥Ú¡¼¥¸Ì¾
129 * @return String ¥Ð¥Ã¥¯¥¢¥Ã¥×¤Î¥Õ¥¡¥¤¥ë̾
131 function backup_get_filename($page)
133 return BACKUP_DIR.encode($page).BACKUP_EXT;
138 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤¹¤ë¤«
141 * @param String $page ¥Ú¡¼¥¸Ì¾
143 * @return Boolean TRUE:¤¢¤ë FALSE:¤Ê¤¤
145 function backup_file_exists($page)
147 return file_exists(backup_get_filename($page));
151 * backup_get_filetime
152 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤Î¹¹¿·»þ¹ï¤òÆÀ¤ë
155 * @param String $page ¥Ú¡¼¥¸Ì¾
157 * @return Integer ¥Õ¥¡¥¤¥ë¤Î¹¹¿·»þ¹ï(GMT)
160 function backup_get_filetime($page)
162 return backup_file_exists($page) ?
163 filemtime(backup_get_filename($page)) - LOCALZONE :
169 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òºï½ü¤¹¤ë
172 * @param String $page ¥Ú¡¼¥¸Ì¾
174 * @return Boolean FALSE:¼ºÇÔ
176 function backup_delete($page)
178 return unlink(backup_get_filename($page));
181 /////////////////////////////////////////////////
183 if (function_exists('gzfile'))
185 // ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à´Ø¿ô
187 define('BACKUP_EXT','.gz');
191 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤ò³«¤¯
194 * @param String $page ¥Ú¡¼¥¸Ì¾
195 * @param String $mode ¥â¡¼¥É
197 * @return Boolean FALSE:¼ºÇÔ
199 function backup_fopen($page,$mode)
201 return gzopen(backup_get_filename($page),$mode);
206 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤Ë½ñ¤¹þ¤à
209 * @param Integer $zp ¥Õ¥¡¥¤¥ë¥Ý¥¤¥ó¥¿
210 * @param String $str ʸ»úÎó
212 * @return Boolean FALSE:¼ºÇÔ ¤½¤Î¾:½ñ¤¹þ¤ó¤À¥Ð¥¤¥È¿ô
214 function backup_fputs($zp,$str)
216 return gzputs($zp,$str);
221 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òÊĤ¸¤ë
224 * @param Integer $zp ¥Õ¥¡¥¤¥ë¥Ý¥¤¥ó¥¿
226 * @return Boolean FALSE:¼ºÇÔ
228 function backup_fclose($zp)
235 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤ÎÆâÍƤò¼èÆÀ¤¹¤ë
238 * @param String $page ¥Ú¡¼¥¸Ì¾
240 * @return Array ¥Õ¥¡¥¤¥ë¤ÎÆâÍÆ
242 function backup_file($page)
244 return backup_file_exists($page) ?
245 gzfile(backup_get_filename($page)) :
249 /////////////////////////////////////////////////
252 // ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à´Ø¿ô
253 define('BACKUP_EXT','.txt');
257 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤ò³«¤¯
260 * @param String $page ¥Ú¡¼¥¸Ì¾
261 * @param String $mode ¥â¡¼¥É
263 * @return Boolean FALSE:¼ºÇÔ
265 function backup_fopen($page,$mode)
267 return fopen(backup_get_filename($page),$mode);
272 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤Ë½ñ¤¹þ¤à
275 * @param Integer $zp ¥Õ¥¡¥¤¥ë¥Ý¥¤¥ó¥¿
276 * @param String $str ʸ»úÎó
278 * @return Boolean FALSE:¼ºÇÔ ¤½¤Î¾:½ñ¤¹þ¤ó¤À¥Ð¥¤¥È¿ô
280 function backup_fputs($zp,$str)
282 return fputs($zp,$str);
287 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òÊĤ¸¤ë
290 * @param Integer $zp ¥Õ¥¡¥¤¥ë¥Ý¥¤¥ó¥¿
292 * @return Boolean FALSE:¼ºÇÔ
294 function backup_fclose($zp)
301 * ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤ÎÆâÍƤò¼èÆÀ¤¹¤ë
304 * @param String $page ¥Ú¡¼¥¸Ì¾
306 * @return Array ¥Õ¥¡¥¤¥ë¤ÎÆâÍÆ
308 function backup_file($page)
310 return backup_file_exists($page) ?
311 file(backup_get_filename($page)) :