PukiWiki ' . S_VERSION . '' . ' Copyright © 2001-2004' . ' PukiWiki Developers Team.' . ' License is GPL.
' . ' Based on "PukiWiki" 1.3 by yu-ji' ); ///////////////////////////////////////////////// // 初期設定 (サーバ変数) foreach (array('SCRIPT_NAME', 'SERVER_ADMIN', 'SERVER_NAME', 'SERVER_PORT', 'SERVER_SOFTWARE') as $key) { define($key, isset($_SERVER[$key]) ? $_SERVER[$key] : ''); unset(${$key}, $_SERVER[$key], $HTTP_SERVER_VARS[$key]); } ///////////////////////////////////////////////// // 初期設定 (グローバル変数) $foot_explain = array(); // 脚注 $related = array(); // 関連するページ $head_tags = array(); // 内に追加するタグ ///////////////////////////////////////////////// // 初期設定(時間) define('LOCALZONE', date('Z')); define('UTIME', time() - LOCALZONE); define('MUTIME', getmicrotime()); ///////////////////////////////////////////////// // 初期設定(設定ファイルの場所) define('INI_FILE', DATA_HOME . 'pukiwiki.ini.php'); // ファイル読み込み $die = ''; if (! file_exists(INI_FILE) || ! is_readable(INI_FILE)) { $die = "${die}File is not found. (INI_FILE)\n"; } else { require(INI_FILE); } if ($die) die_message(nl2br("\n\n" . $die)); ///////////////////////////////////////////////// // INI_FILE: LANG に基づくエンコーディング設定 switch (LANG){ case 'en': // Internal content encoding = Output content charset (for skin) define('CONTENT_CHARSET', 'iso-8859-1'); // 'UTF-8', 'iso-8859-1', 'EUC-JP' or ... // mb_language (for mbstring extension) define('MB_LANGUAGE', 'English'); // 'uni'(means UTF-8), 'English', or 'Japanese' // Internal content encoding (for mbstring extension) define('SOURCE_ENCODING', 'ASCII'); // 'UTF-8', 'ASCII', or 'EUC-JP' break; case 'ja': // EUC-JP define('CONTENT_CHARSET', 'EUC-JP'); define('MB_LANGUAGE', 'Japanese'); define('SOURCE_ENCODING', 'EUC-JP'); break; default: die_message('No such language "' . LANG . '"'); } mb_language(MB_LANGUAGE); mb_internal_encoding(SOURCE_ENCODING); ini_set('mbstring.http_input', 'pass'); mb_http_output('pass'); mb_detect_order('auto'); ///////////////////////////////////////////////// // INI_FILE: UI_LANG 初期設定(言語ファイルの場所) define('LANG_FILE', DATA_HOME . UI_LANG . '.lng.php'); // ファイル読み込み $die = ''; if (! file_exists(LANG_FILE) || ! is_readable(LANG_FILE)) { $die = "${die}File is not found. (LANG_FILE)\n"; } else { require(LANG_FILE); } if ($die) die_message(nl2br("\n\n" . $die)); ///////////////////////////////////////////////// // LANG_FILE: 曜日配列 $weeklabels = $_msg_week; ///////////////////////////////////////////////// // INI_FILE: $script: 初期設定 if (isset($script)) { // Init manually get_script_uri($script); } else { // Init automatically $script = get_script_uri(); } ///////////////////////////////////////////////// // INI_FILE: $agents: UserAgentの識別 $ua = 'HTTP_USER_AGENT'; $user_agent = $matches = array(); $user_agent['agent'] = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; unset(${$ua}, $_SERVER[$ua], $HTTP_SERVER_VARS[$ua], $ua); // safety foreach ($agents as $agent) { if (preg_match($agent['pattern'], $user_agent['agent'], $matches)) { $user_agent['profile'] = isset($agent['profile']) ? $agent['profile'] : ''; $user_agent['name'] = isset($matches[1]) ? $matches[1] : ''; // device or browser name $user_agent['vers'] = isset($matches[2]) ? $matches[2] : ''; // 's version break; } } unset($agents, $matches); // Profile-related init and setting define('UA_PROFILE', isset($user_agent['profile']) ? $user_agent['profile'] : ''); define('UA_INI_FILE', DATA_HOME . UA_PROFILE . '.ini.php'); if (! file_exists(UA_INI_FILE) || ! is_readable(UA_INI_FILE)) { die_message('UA_INI_FILE for "' . UA_PROFILE . '" not found.'); } else { require(UA_INI_FILE); // Also manually } define('UA_NAME', isset($user_agent['name']) ? $user_agent['name'] : ''); define('UA_VERS', isset($user_agent['vers']) ? $user_agent['vers'] : ''); unset($user_agent); // Unset after reading UA_INI_FILE ///////////////////////////////////////////////// // ディレクトリのチェック $die = ''; foreach(array('DATA_DIR', 'DIFF_DIR', 'BACKUP_DIR', 'CACHE_DIR') as $dir){ if (! is_writable(constant($dir))) $die = "${die}Directory is not found or not writable ($dir)\n"; } // 設定ファイルの変数チェック $temp = ''; foreach(array('rss_max', 'page_title', 'note_hr', 'related_link', 'show_passage', 'rule_related_str', 'load_template_func') as $var){ if (! isset(${$var})) $temp .= "\$$var\n"; } if ($temp) { if ($die) $die .= "\n"; // A breath $die .= "Variable(s) not found: (Maybe the old *.ini.php?)\n" . $temp; } $temp = ''; foreach(array('LANG', 'PLUGIN_DIR') as $def){ if (! defined($def)) $temp .= "$def\n"; } if ($temp) { if ($die) $die .= "\n"; // A breath $die .= "Define(s) not found: (Maybe the old *.ini.php?)\n" . $temp; } if($die) die_message(nl2br("\n\n" . $die)); unset($die, $temp); ///////////////////////////////////////////////// // 必須のページが存在しなければ、空のファイルを作成する foreach(array($defaultpage, $whatsnew, $interwiki) as $page){ if (! is_page($page)) touch(get_filename($page)); } ///////////////////////////////////////////////// // 外部からくる変数のチェック // Prohibit $_GET attack foreach (array('msg', 'pass') as $key) { if (isset($_GET[$key])) die_message("Sorry, already reserved: $key="); } // Expire risk unset($HTTP_GET_VARS, $HTTP_POST_VARS); //, 'SERVER', 'ENV', 'SESSION', ... unset($_REQUEST); // Considered harmful // Remove null character etc. $_GET = input_filter($_GET); $_POST = input_filter($_POST); $_COOKIE = input_filter($_COOKIE); // 文字コード変換 ($_POST) //
で送信された文字 (ブラウザがエンコードしたデータ) のコードを変換 // POST method は常に form 経由なので、必ず変換する // if (isset($_POST['encode_hint']) && $_POST['encode_hint'] != '') { // html.php の中で、 に encode_hint を仕込んでいるので、 // encode_hint を用いてコード検出する。 // 全体を見てコード検出すると、機種依存文字や、妙なバイナリ // コードが混入した場合に、コード検出に失敗する恐れがある。 $encode = mb_detect_encoding($_POST['encode_hint']); mb_convert_variables(SOURCE_ENCODING, $encode, $_POST); } else if (isset($_POST['charset']) && $_POST['charset'] != '') { // TrackBack Ping で指定されていることがある // うまくいかない場合は自動検出に切り替え if (mb_convert_variables(SOURCE_ENCODING, $_POST['charset'], $_POST) !== $_POST['charset']) { mb_convert_variables(SOURCE_ENCODING, 'auto', $_POST); } } else if (! empty($_POST)) { // 全部まとめて、自動検出/変換 mb_convert_variables(SOURCE_ENCODING, 'auto', $_POST); } // 文字コード変換 ($_GET) // GET method は form からの場合と、 '&$1;', "\r" => "
\n", /* 行末にチルダは改行 */ '#related$' => '#related', '^#contents$' => '#contents' ), $line_rules); ?>