#author("2025-03-25T03:06:08+00:00","default:iseki","iseki") #author("2025-03-25T03:06:22+00:00","default:iseki","iseki") * alias.inc.php - https://arda.saloon.jp/blog/2022/04/aliastraceincphp-php80.htm *** alias.inc.php <pre> <?php /* * PukiWiki Plugin "alias.inc.php" * ver.1.5 2005/05/28 * ver.1.5.1 2022/04/10 * License is GNU/GPL * modified by kochi<elfen@s9.xrea.com> * ver.1.5.1 PHP8.0対応 */ //ジャンプ先URL文字列の最大長指定 define('URL_MAX_BYTES',1024); //ジャンプ回数制限 define('JUMP_MAX',2); function plugin_alias_init() { $messages = array( '_alias_messages'=> array( 'msg_noalias' => "''このページは[[\$dest_page]]へのエイリアスに設定されています。''\n", 'war_mode_invalid' => false, //GETパラメータが対象外 //'war_ignore' => false, //ループの危険性がある呼び出し 'err_loc_invalid' => false, //BODY外での呼び出し(MenuBarなど) 'err_loop' => '(alias:ループしています)', //ジャンプ経路のループ 'err_url_too_long' => '(alias:URLの長さが上限を超えました)', //URL長の上限オーバー 'err_not_exist' => '(alias:指定されたページは存在しません)',//ページが無い・アンカーが不適切 'err_jump_max' => '(alias:ジャンプの回数が上限を超えました)',//ジャンプ回数オーバー ) ); set_plugin_messages($messages); } function plugin_alias_convert() { global $script,$vars,$defaultpage,$get; global $_alias_messages; if($vars['cmd']=='edit') return ''; $my_get_vars = $get; //MenuBarなどで呼び出されている可能性 global $body; if(isset($body)) return $_alias_messages['err_loc_invalid']; //第一引数をジャンプ先ページ名とする if(func_num_args()<=0) return false; $arg = func_get_arg(0); $temp = explode('#',$arg); if(count($temp) > 2) return $_alias_messages['err_not_exist']; list($dest_page,$anchor) = $temp; if(!is_page($dest_page)) return $_alias_messages['err_not_exist']; //cmd=readでない場合は何もしない if(array_key_exists('plugin',$my_get_vars) || $my_get_vars['cmd'] != 'read' || !is_page($my_get_vars['page'])) return $_alias_messages['war_mode_invalid']; //noaliasパラメータがtrueの場合はジャンプしない if($get["noalias"]=='true'){ $msg = str_replace('$dest_page',$dest_page,$_alias_messages['msg_noalias']); return convert_html($msg); } $alias = '&'.rawurlencode('alias[]').'='; $history = ''; if(isset($my_get_vars['alias'])){ //ジャンプ回数がすでに上限値に達していたらエラー if(count($my_get_vars['alias'])>=JUMP_MAX) return $_alias_messages['err_jump_max']; //経路履歴をチェック。ループしていればエラー foreach($my_get_vars['alias'] as $pg){ if($pg == $my_get_vars['page'] || $pg == $dest_page) return $_alias_messages['err_loop']; $history .= $alias. rawurlencode($pg); } } //経路履歴にカレントのページを付け加える $history .= $alias .rawurlencode($my_get_vars['page']); //ジャンプ先URLを生成。長すぎたらエラー $url = $script.'?cmd=read&page='.rawurlencode($dest_page).$history; if(isset($anchor)) $url .= '#'.rawurlencode($anchor); if(strlen($url) > URL_MAX_BYTES) return $_alias_messages['err_url_too_long']; //HTTP Headerを出力して終了 header("Location: $url"); die(); } ?> </pre> *** aliastrace.inc.php <pre> <?php /* * PukiWiki plugin aliastrace * 2005/12/09 version 1.2 */ function plugin_aliastrace_inline() { global $vars; $history = $vars['alias']; list($h,$f,$n)=func_get_args(); list($pagename,$ancor) = explode('#',$history[0]); $uri = "$script?cmd=edit&page=" . rawurlencode($pagename); if(is_page($pagename)) //return make_link($h.$pagename.$f); //編集ページへリンクしない return make_link($h) ."<a href=\"$uri\">{$pagename}</a>". make_link($f) ."<hr class=\"full_hr\" />"; else return htmlspecialchars($n); } ?> </pre> *** Setting - skin/pukiwiki.skin.php の <?php echo $body ?> の前 <pre> <!-- ページエイリアス用 --> <?php if ($is_page) { ?> <?php require_once(PLUGIN_DIR.'aliastrace.inc.php'); echo plugin_aliastrace_inline("このページは","より転送されました。" ); ?> <?php } ?> <!-- ページエイリアス用 終了 --> </pre> *** Usage <pre> #alias(alias_page_name) </pre> - 例 -- named **** 例 - named #alias(Bind)