$template) { if (preg_match("/$rule/",$page,$matches)) { $template_page = preg_replace("/$rule/",$template,$page); if (is_page($template_page)) { $body = join('',get_source($template_page)); // 見出しの固有ID部を削除 $body = preg_replace('/^(\*{1,3}.*)\[#[A-Za-z][\w-]+\](.*)$/m','$1$2',$body); // #freezeを削除 $body = preg_replace('/^#freeze\s*$/m','',$body); for ($i = 0; $i < count($matches); $i++) { $body = str_replace("\$$i",$matches[$i],$body); } break; } } } return $body; } // 検索語を展開する function get_search_words($words,$special=FALSE) { $retval = array(); // Perlメモ - 正しくパターンマッチさせる // http://www.din.or.jp/~ohzaki/perl.htm#JP_Match $eucpre = $eucpost = ''; if (SOURCE_ENCODING == 'EUC-JP') { $eucpre = '(? 0); if ($b_match xor $b_type) { break; } } if ($b_match) { $pages[$page] = get_filetime($page); } } if ($non_format) { return array_keys($pages); } $r_word = rawurlencode($word); $s_word = htmlspecialchars($word); if (count($pages) == 0) { return str_replace('$1',$s_word,$_msg_notfoundresult); } ksort($pages); $retval = "\n"; $retval .= str_replace('$1',$s_word,str_replace('$2',count($pages), str_replace('$3',count($_pages),$b_type ? $_msg_andresult : $_msg_orresult))); return $retval; } // プログラムへの引数のチェック function arg_check($str) { global $vars; return array_key_exists('cmd',$vars) and (strpos($vars['cmd'],$str) === 0); } // ページ名のエンコード function encode($key) { return ($key == '') ? '' : strtoupper(join('',unpack('H*0',$key))); } // ページ名のデコード function decode($key) { return ($key == '') ? '' : substr(pack('H*','20202020'.$key),4); } // [[ ]] を取り除く function strip_bracket($str) { if (preg_match('/^\[\[(.*)\]\]$/',$str,$match)) { $str = $match[1]; } return $str; } // ページ一覧の作成 function page_list($pages, $cmd = 'read', $withfilename=FALSE) { global $script,$list_index,$top; global $_msg_symbol,$_msg_other; // ソートキーを決定する。 ' ' < '[a-zA-Z]' < 'zz'という前提。 $symbol = ' '; $other = 'zz'; $retval = ''; $list = array(); foreach($pages as $file=>$page) { $r_page = rawurlencode($page); $s_page = htmlspecialchars($page,ENT_QUOTES); $passage = get_pg_passage($page); $str = "
  • $s_page$passage"; if ($withfilename) { $s_file = htmlspecialchars($file); $str .= "\n \n "; } $str .= "
  • "; $head = (preg_match('/^([A-Za-z])/',$page,$matches)) ? $matches[1] : (preg_match('/^([ -~0-9])/',$page,$matches) ? $symbol : $other); $list[$head][$page] = $str; } ksort($list); $cnt = 0; $arr_index = array(); $retval .= "\n"; if ($list_index and $cnt > 0) { $top = array(); while (count($arr_index) > 0) { $top[] = join(" | \n",array_splice($arr_index,0,16))."\n"; } $retval = "
    \n". join("
    ",$top)."
    \n".$retval; } return $retval; } // テキスト整形ルールを表示する function catrule() { global $rule_page; if (!is_page($rule_page)) { return "

    sorry, $rule_page unavailable.

    "; } return convert_html(get_source($rule_page)); } // エラーメッセージを表示する function die_message($msg) { $title = $page = 'Runtime error'; $body = <<Runtime error Error message : $msg EOD; if(defined('SKIN_FILE') && file_exists(SKIN_FILE) && is_readable(SKIN_FILE)) { catbody($title,$page,$body); } else { header('Content-Type: text/html; charset=euc-jp'); print << $title $body EOD; } die(); } // 現在時刻をマイクロ秒で取得 function getmicrotime() { list($usec, $sec) = explode(' ',microtime()); return ((float)$sec + (float)$usec); } // 日時を得る function get_date($format,$timestamp = NULL) { $time = ($timestamp === NULL) ? UTIME : $timestamp; $time += ZONETIME; $format = preg_replace('/(?60,'h'=>24,'d'=>1); $time = max(0,(UTIME - $time) / 60); //minutes foreach ($units as $unit=>$card) { if ($time < $card) { break; } $time /= $card; } $time = floor($time).$unit; return $paren ? "($time)" : $time; } //を隠す function drop_submit($str) { return preg_replace( '/]+)type="(submit|button|image)"/i', 'read(); $ignorepages = $config->get('IgnoreList'); $forceignorepages = $config->get('ForceIgnoreList'); unset($config); $auto_pages = array_merge($ignorepages,$forceignorepages); foreach ($pages as $page) { if (preg_match("/^$WikiName$/",$page) ? $nowikiname : strlen($page) >= $autolink) { $auto_pages[] = $page; } } if (count($auto_pages) == 0) { return $nowikiname ? '(?!)' : $WikiName; } $auto_pages = array_unique($auto_pages); sort($auto_pages,SORT_STRING); $result = get_autolink_pattern_sub($auto_pages,0,count($auto_pages),0); return array($result,$forceignorepages); } function get_autolink_pattern_sub(&$pages,$start,$end,$pos) { $result = ''; $count = 0; $x = (mb_strlen($pages[$start]) <= $pos); if ($x) { $start++; } for ($i = $start; $i < $end; $i = $j) { $char = mb_substr($pages[$i],$pos,1); for ($j = $i; $j < $end; $j++) { if (mb_substr($pages[$j],$pos,1) != $char) { break; } } if ($i != $start) { $result .= '|'; } if ($i >= ($j - 1)) { $result .= preg_quote(mb_substr($pages[$i],$pos),'/'); } else { $result .= preg_quote($char,'/'). get_autolink_pattern_sub($pages,$i,$j,$pos + 1); } $count++; } if ($x or $count > 1) { $result = '(?:'.$result.')'; } if ($x) { $result .= '?'; } return $result; } /* 変数内のnull(\0)バイトを削除する PHPはfopen("hoge.php\0.txt")で"hoge.php"を開いてしまうなどの問題あり http://ns1.php.gr.jp/pipermail/php-users/2003-January/012742.html [PHP-users 12736] null byte attack 2003-05-16: magic quotes gpcの復元処理を統合 2003-05-21: 連想配列のキーはbinary safe */ function sanitize($param) { if (is_array($param)) { $result = array_map('sanitize',$param); } else { $result = str_replace("\0",'',$param); if (get_magic_quotes_gpc()) { $result = stripslashes($result); } } return $result; } //is_a //(PHP 4 >= 4.2.0) // //is_a -- Returns TRUE if the object is of this class or has this class as one of its parents if (!function_exists('is_a')) { function is_a($class, $match) { if (empty($class)) { return false; } $class = is_object($class) ? get_class($class) : $class; if (strtolower($class) == strtolower($match)) { return true; } return is_a(get_parent_class($class), $match); } } //array_fill //(PHP 4 >= 4.2.0) // //array_fill -- Fill an array with values if (!function_exists('array_fill')) { function array_fill($start_index,$num,$value) { $ret = array(); while ($num-- > 0) { $ret[$start_index++] = $value; } return $ret; } } //md5_file //(PHP 4 >= 4.2.0) // //md5_file -- Calculates the md5 hash of a given filename if (!function_exists('md5_file')) { function md5_file($filename) { if (!file_exists($filename)) { return FALSE; } $fd = fopen($filename, 'rb'); $data = fread($fd, filesize($filename)); fclose($fd); return md5($data); } } ?>