#author("2025-09-17T14:18:28+09:00;2025-09-17T13:38:14+09:00","default:inoue.ko","inoue.ko") #author("2025-09-17T14:18:45+09:00;2025-09-17T14:18:28+09:00","default:inoue.ko","inoue.ko") *PukiWiki活用メモ RIGHT:[[PukiWiki]] ~ ***Notes Login Required ***Notes(Login Required) -[[note/PukiWikiバージョンアップ手順]] -[[note/PukiWiki1.5.4開発メモ]] -[[note/PukiWiki1.5.2開発メモ]] -[[note/PukiWiki1.5.1開発メモ]] ~ #contents2_1 ~ ~ **編集記法覚書 ***公式のテキスト整形ルール -[[FormattingRules]] ~ ***アンカー -ページ内の中途、アンカーを置きたい場所に以下のように記載 &aname(label01); 名称は半角英数 -リンク先の記述を以下のように書けばOK [[ページ名#label01]] ~ ***上付き文字・下付き文字 default.ini.php 117行目付近 ユーザー定義ルールに以下の2つを追加 $line_rules = array( : "SUP{([^}]*)};" => '<span style="vertical-align:super; font-size:60%;">$1</span>', "SUB{([^}]*)};" => '<span style="vertical-align:sub; font-size:60%;">$1</span>', ); 以上の設定により、以下の表記が可能になります。 上付き:SUP{文字列}; 例) 2 SUP{8}; = 256 下付き:SUB{文字列}; 例) - log SUB{2}; P 表示例:2 SUP{8}; = 256 - log SUB{2}; P ~ ***下線 default.ini.php 117行目付近 ユーザー定義ルールに以下を追加 $line_rules = array( : "__(?!_)((?:(?!__).)*)__" => '<span style="text-decoration:underline;">$1</span>', ); 以上の設定により、以下の表記が可能になります。 下線:__アンダーライン__ 表示例:__アンダーライン__ ~ ***サイトマップを作るには サイト全体のコレクションであれば「一覧」を応用。 必要なページの見出しをコレクションするには以下。 #ls2([ページ名],title) これを列挙 ~ ~ **コマンド操作 アドレスバーで、(URL)/index.phpに続けて ?cmd=, ?plugin= など ~ ***コマンドで編集画面に入る(ボタンがない場合) http://(URL)/index.php?cmd=edit&page=(ページ名) ~ ***ページの一覧を各ページの実ファイル名と共に表示 http://(URL)/index.php??cmd=filelist ~ ***添付の一覧を表示 http://(URL)/?plugin=attach // http://(URL)/?plugin=attach&pcmd=list 不要な添付ファイル(添付のバックアップ)はここから「詳細」をクリックして削除可能。 ~ ***PukiWiki 暗号化テキスト生成 PukiWikiサイトであれば標準機能です。pukiwiki.ini.phpにパスワードを暗号化して記述する場合などに利用 http://(URL)/index.php?plugin=md5 ~ ~ **デフォルトシステム ***デバッグモードの利用 index.phpの9行目付近を変更 error_reporting(E_ERROR | E_PARSE); // Avoid E_WARNING, E_NOTICE, etc //error_reporting(E_ALL); // Debug purpose ↓ //error_reporting(E_ERROR | E_PARSE); // Avoid E_WARNING, E_NOTICE, etc error_reporting(E_ALL); // Debug purpose 参考:実際、その都度index.phpを書き換えるのは面倒。そこで上記を変更したファイルをdebug.phpとして置いておけば、必要に応じてURLを・・/debug.php?・・にすることでエラーをチェックできる。 ~ ***クエリ文字列長について pukiwiki.ini.php 42行目 日本語の長いページ名を扱う場合は、以下のように数値を修正する必要あり。 //define('PKWK_QUERY_STRING_MAX', 640); // Bytes, 0 = OFF define('PKWK_QUERY_STRING_MAX', 1280); // Bytes, 0 = OFF 通常、この変更は必要ないが、長い名称のページの編集においてログインしようとした場合に、制限がかかる。QUERY STRING TOO LONG というエラーメッセージが出てログインできなくなるケースがある場合は、上記のように数値を大きく修正する必要あり。 ~ ***WikiName(大文字小文字を混ぜた英文字列)を無効にするには pukiwiki.ini.phpの「$nowikiname」を 「1」に設定 一部のWikiNameのみに適応したい場合は、大文字に当たる部分を全角で入力、または、以下のように数値参照文字を使う。 WorldWide この書き方であれば、WikiName機能を無効にしてWorldWideと表示可。 ~ ***編集時に ~ を使わずに改行をそのまま反映させたい pukiwiki.ini.phpの以下の部分を変更 ///////////////////////////////////////////////// // 改行を反映する(改行を<br />に置換する) $line_break = 0; → $line_break = 1に変更する。 ~ ***「見出し」の右上の(↑) 見出し右上のナビゲータへのリンク(↑)を消去するには、 default.ini.php で $top = $_msg_content_back_to_top ; ← この行をコメントアウトして $top = ''; ←このよう(シングルクオーテーション2つ)にする ~ ***「見出し」に自動生成されるダガー:†を消すには アンカー機能を残しつつ、「†」が表示されないように変更するには ja.lng.php で //$_symbol_anchor = '&dagger;'; ← この行をコメントアウトして $_symbol_anchor = ' '; ←全角スペースを定義する ~ ***「見出し」に自動生成されるアンカーを無くすには pukiwiki.ini.php内「Automatically add fixed heading anchor」の項目で $fixed_heading_anchor = 0; ~ ***ライセンス文字列 S_COPYRIGHT は lib/init.php 内に情報あり ~ ***listのインデント設定 default.ini を編集 ~ ***添付ファイルの上限サイズ設定(デフォルト1MBを16MBへ) -plugin/attach.inc.phpの15行目 ini_set("upload_max_filesize","2M"); を ini_set("upload_max_filesize","16M"); へ -同じくattach.inc.phpの19行目 define('PLUGIN_ATTACH_MAX_FILESIZE', (1 * 1024 * 1024)); を define('PLUGIN_ATTACH_MAX_FILESIZE', (16 * 1024 * 1024)); へ ~ ***添付時に管理者パスワード入力を求めないようにするには attach.inc.php 23行で define('PLUGIN_ATTACH_UPLOAD_ADMIN_ONLY', TRUE); → FALSEへ ~ ***添付の削除時にバックアップを作らないようにするには attach.inc.php で以下のように設定するとよい。添付のバックアップはディスクを消費するので、作らない方がよい。 // 管理者が添付ファイルを削除するときは、バックアップを作らない // PLUGIN_ATTACH_DELETE_ADMIN_ONLY=TRUEのとき有効 define('PLUGIN_ATTACH_DELETE_ADMIN_NOBACKUP', TRUE); // FALSE or TRUE ~ ***RENAME時に管理者パスワードを求めないように rename.inc.php を以下のように変更 --- rename.inc.php.orig Sat Jul 31 12:09:20 2004 +++ rename.inc.php Fri Nov 26 18:16:52 2004 @@ -273,7 +273,7 @@ } } $pass = rename_getvar('pass'); - if ($pass != '' && pkwk_login($pass)) + if ($pass != '') { return rename_proceed($pages, $files, $exists); } @@ -337,8 +337,7 @@ <div> <input type="hidden" name="plugin" value="rename" /> $input - {$_rename_messages['msg_adminpass']} - <input type="password" name="pass" value="" /> + <input type="hidden" name="pass" value="dummy" /> <input type="submit" value="{$_rename_messages['btn_submit']}" /> </div> ~ ***RecentChangesコマンドで表示される件数 ・・・/index.php?RecentChanges で最新の更新一覧が表示されます。 件数は、pukiwiki.ini.php 280行目付近 $maxshowの値で決まります。 // $whatsnew: Max number of RecentChanges $maxshow = 100; ~ ***無視ページの設定 pukiwiki.ini.php:491行目付近 // Regex of ignore pages $non_list = '^\:'; 最終更新や一覧に表示させたくないページを設定する機能です。 -除外したいページを[[正規表現>RegularExpression]]で記述します。 -以下の例では、「行頭が : ではじまるページ」または「行頭が test ではじまるページ」が無視の対象となります。 $non_list = '^\:|^test'; --^ は「行頭の」を意味します。 --\ は、直後の「メタ文字( : )」を通常の文字として扱え・・を意味します( \ は [Option]+[¥] で出ます)。 -- | は、論理和(〜または〜)を意味します。 ~ ***無視ページに該当するものを検索時に表示するか pukiwiki.ini.php:上記項目の下 // Search ignored pages $search_non_list = 1;(検索対象となって表示される) 0にすると :config 等のシステムファイルは検索時にも無視されます。 ~ ***無視ページに ignore を設定しても recent に出てしまう。 > cache/recent.dat を一旦削除すればOK ~ ~ **プラグイン開発 ***articleプラグインの別バージョン 投稿記事の下のコメント入力あり・なしは、プラグインファイル内の以下の部分で変更する必要がある。 define('PLUGIN_ARTICLE_COMMENT',1); // 1:入れる 0:入れない しかし、ユーザーサイドでコメント入力あり・なしを選択できるよう、プラグイン自体を別バージョンにして、article_plus などとして運用したい場合、以下の3箇所を変更することで別バージョンとして動かすことができる。 -function plugin_article_action > function plugin_article_plus_action -function plugin_article_convert >function plugin_article_plus_convert -convert 関数内の以下を変更 <input type="hidden" name="plugin" value="article" /> → <input type="hidden" name="plugin" value="article_plus" /> ~ ***search #lookup で Search を有効にするには、以下を0 に。(デフォルトは1) ただし、コマンド検索が可能になるので、スパム攻撃受けやすくなる。 // Allow search via GET method 'index.php?plugin=search&word=keyword' // NOTE: Also allows DoS to your site more easily by SPAMbot or worm or ... define('PLUGIN_SEARCH_DISABLE_GET_ACCESS', 0); // 1, 0 ~ **環境設定 ***特定のネットワーク外からのアクセスを不可にするには .htaccess内に以下の記述を追加 <Limit GET> order deny,allow deny from all allow from 133.17. </Limit> ~ ~ **デュアルシステム ''index.php と member.php を用意して、異なる入り口に異なるスキンを適用'' ~ ***pukiwiki.ini.php 以下をコメントアウトして、pukiwiki.ini.php における SKIN_DIR 設定を無効化 // Directory settings II (ended with '/') // Skins / Stylesheets // define('SKIN_DIR', 'skin/'); ← ココ 85行目付近 ~ ***index.php 以下のような記述を加えて、SKIN_DIR を認識させる // Directory definition // (Ended with a slash like '../path/to/pkwk/', or '') define('DATA_HOME', ''); define('LIB_DIR', 'lib/'); define('SKIN_DIR', 'skin/'); ← ココ 22行目付近(標準スキン) ~ ***member.php 以下のような記述を加えて、SKIN_DIR を認識させる // Directory definition // (Ended with a slash like '../path/to/pkwk/', or '') define('DATA_HOME', ''); define('LIB_DIR', 'lib/'); define('SKIN_DIR', 'skin_member/'); ← ココ 22行目付近(専用スキン) ~ ~ **その他 ***システムファイル :config 以下のようにして閲覧・編集可能 /path/to/index.php?:config /path/to/index.php?:config/plugin/attach/mime-type ~ ***プラグインが動作しない プラグイン名に大文字を使うと、サーバーによっては動かないことがある fileName.inc.php → file_name.inc.php ~ ***閲覧認証が通らない場合にも、メニュー部分が表示されてしまう問題。 これらも表示されないようにするには、''lib/auth.php'' で 以下のように、表示情報部分をコメントアウトし、echo で最小限のメッセージを表示するよう変更するとよい。 if ($exit_on_fail) { //$body = $title = str_replace('$1', //htmlsc(strip_bracket($page)), $title_cannot); //$page = str_replace('$1', make_search($page), $title_cannot); //catbody($title, $page, $body); echo "閲覧には正しいIDとパスワードが必要です"; exit; } 384行目付近 //以下、旧バージョン2 // if ($exit_flag) { // //$body = $title = str_replace('$1', // // htmlsc(strip_bracket($page)), $title_cannot); // //$page = str_replace('$1', make_search($page), $title_cannot); // //catbody($title, $page, $body); // echo "閲覧には正しいIDとパスワードが必要です"; // exit; // } //Basic authentication > Auth failed の部分 248行目付近 //以下、旧バージョン // if ($auth_flag) { // header('WWW-Authenticate: Basic realm="' . $_msg_auth . '"'); // header('HTTP/1.0 401 Unauthorized'); // } // if ($exit_flag) { //以下の表示部分をコメントアウト // //$body = $title = str_replace('$1', // // htmlspecialchars(strip_bracket($page)), $title_cannot); // //$page = str_replace('$1', make_search($page), $title_cannot); // //catbody($title, $page, $body); // echo "閲覧には正しいIDとパスワードが必要です"; // exit; // } ~ ~ #hr CENTER:'''''以下、古い情報''''' #hr ~ ~ **PHP8への対応 ***新バージョン PukiWiki 1.5.4 を導入 PukiWiki 1.5.4 は、PHP8.1 に対応 ~ ~ **PHP7への対応 ***新バージョンの PukiWiki 1.5.1 を導入 -認証方法含め、かなり変更あり。1.5.0からの変更には提供されているパッチをあてるか、以下の手順で順次確認しつつ移行するのが無難 -PukiWIki 1.5.1 をベースに、 --pukiwiki.ini.php の書き換え --attach, cash, counter, wiki, 等、コンテンツを投入 --skinについては、pukiwiki.skin.php のシステム部分の記述に変更があるため、稼働中のそれがオリジナルのものである場合には、1.5.1の pukiwiki.skin.php をベースに、必要な部分を書き換える必要があります。 --オリジナルプラグインの投入 ~ ***プラグインのエラー Parse error: syntax error, unexpected 'new' (T_NEW) in PHP5からPHP7にバージョンを上げた際に上記のエラー PHP7では新しいオブジェクトを参照渡しで代入ができない・・ $obj = & new AttachPages2($refer); を以下のように修正 $obj = new AttachPages2($refer); ~ ~ **PHP5.5への対応 ***新バージョンの PukiWiki 1.5.0 を導入 -基本的には、libフォルダ と pluginフォルダを入れ替えれば問題は解消 -但し、プラグインをカスタマイズしているケースでは、個々に調整が必要 ~ ~ **PHP5.4系で動かなくなる問題 PukiWiki 1.4.7の継続利用については、とりあえずは、以下の修正で動く -hex2bin関数をコメントアウト lib/func.php にある「hex2bin」関数が、PHP5.4からネイティブ関数化されているので、これをコメントアウト(以下のようにする)。 // Inversion of bin2hex() /* function hex2bin($hex_string) { // preg_match : Avoid warning : pack(): Type H: illegal hex digit ... // (string) : Always treat as string (not int etc). See BugTrack2/31 return preg_match('/^[0-9a-f]+$/i', $hex_string) ? pack('H*', (string)$hex_string) : $hex_string; } */ -ls2プラグインの関数呼び出し時の参照渡しを修正 plugin/ls2.inc.php で、関数呼び出し時の参照渡しがされているため、 これを修正。 array_walk($args, 'plugin_ls2_check_arg', & $params); ↓ array_walk($args, 'plugin_ls2_check_arg', $params); -オンラインユーザーの表示にも問題。onlineプラグインを修正 plugin/online.inc.php の中に2箇所 plugin_online_check_online(& $count, $host) ↓ plugin_online_check_online($count, $host) 参考:http://pukiwiki.sourceforge.jp/dev/?BugTrack2%2F349 ~ ~ **PHPがCGIモードでBASIC認証が効かない場合 -解決策1 SESSIONスタイル plugin フォルダに [[login.inc.php>http://pukiwiki.sourceforge.jp/?%E8%87%AA%E4%BD%9C%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%2Flogin.inc.php]]を投入 lib フォルダ内の auth.php を login.inc.php用のもので置き換え ※当該プラグインページからDL可 pukiwiki.ini.phpへ $auth_type = 'session';session_start();session_regenerate_id(TRUE); の一行を追加。 ただ、このままだと、refで画像表示する回数が増えると編集できなくなる。 そこで、 session_regenerate_id(TRUE) の項目をコメントアウトして $auth_type = 'session';session_start(); の記述に変更すると、refで表示する回数を2箇所以上でもOKとなった。 ~ -解決策2 DUAL INDEX スタイル 一般閲覧用の pukiwiki.skin.phpからはツールバー部分を削除することで 一見 PukiWikiであることがわからないビジュアルにする。 pukiwiki.ini.php では、$edit_auth = 0; として、編集認証を用いないようにする --手順1:index.php をコピーして index_admin.php をつくる ---index.php? :一般閲覧者にアクセスさせる >ツールバー非表示スキン skin を利用 ---index_admin.php? 管理者はここからアクセスする >ツールバー表示スキン skin_admin を利用 編集は誰でもOK状態とするが、index_admin.php というファイルの名前を非公開(事実上のパスワード)とすることで、事実上、管理者のみが編集できるというかたちにする・・・ という発想。 見えているサイトがPukiWikiによるものとわかれば、index.phpからでも、コマンドを利用して編集が可能になってしまうが、 具体的には index.php?cmd=edit&page=ページ名 しかし実際は、よほどの悪意がないかぎり、そうまでして荒らされることはない。一般的な告知を行うのみのサイトでは、これでも実用上は問題ない。 --手順2:skinフォルダの設定情報を書き分ける pukiwiki.ini.php にある、SKIN_DIR という変数が、SKINフォルダの位置。この情報を、pukiwiki.ini.php から消去し、index.php と index_admin.php に移動して、それぞれに異なる SKIN を利用するようにすればよい。 // Skins / Stylesheets define('SKIN_DIR', 'skin/'); ---index.php に以下の2行を追加 // Skins / Stylesheets define('SKIN_DIR', 'skin/'); ---index_admin.php:に以下の2行を追加 // Skins / Stylesheets define('SKIN_DIR', 'skin_admin/'); --手順3:skin フォルダを複製して、skin_admin をつくる ---skin:一般閲覧者用のスキン(ツールバー部分を非表示に) ---skin_admin:管理者用のスキン --手順4:index_admin.php が検索でかからないよう設定する skin_admin 内 pukiwiki.skin.php の metaname 部分を以下のように変更 <meta name="robots" content="NOINDEX,NOFOLLOW" /> //index_admin.php の 23 24 行めあたりに以下の2行を追加 // //define('SKIN_DIR', 'skin/'); //define('SKIN_FILE', DATA_HOME . SKIN_DIR . 'pukiwiki.skin_admin.php'); // //pukiwiki.skin.php を複製して pukiwiki.skin_admin.php をつくる // ~ ~ **yesterdayのカウントが0になってしまう場合 plugin/couter.inc.php ファイル内86行目を以下のように修正する。 -× get_date('Y/m/d', strtotime('yesterday', UTIME))); -○ get_date('Y/m/d', strtotime('yesterday'))); ~ ~ **Kcaptchaで画像が表示されない -PHPにGDがインストールされている必要がある。 -GD for PHP5 を追加インストールしたら解決 ~ ~ **Flashが最前面にきてしまう問題の解決策 //http://web-conte.com/blue/200610/23_1952.php より Flashオブジェクトは z-indexなどの指定を無視して、基本的にドキュメントの最前面に表示される。これを解決するにはFlashを埋め込む際、背景を透過する命令を書き加えればいい。 -object要素内に下記を追加 <param name="wmode" value="transparent" /> - embed要素の属性に下記を追加 wmode="transparent" 芸学サイトのトップのスライドについては、以下のとおり変更 -オリジナル function flash_activate(){ // ---- initialize tag string ---- var strObj = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '; var strPrm = ''; var strEmb = '<embed '; -変更後 function flash_activate(){ // ---- initialize tag string ---- var strObj = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '; var strPrm = '<param name="wmode" value="transparent" />'; // ここ変更 var strEmb = '<embed wmode="transparent" '; // ここ変更 ~ ~