下記のページも参考にしてください。
Q.続き
任意のページに対して、閲覧・編集・検索でアクセス制御を行うには?
A. こちらをご覧下さい。
A. PukiWiki 1.3の場合は、凍結機能を利用してください。
PukiWiki 1.4の場合は、PHP経由でBasic認証による閲覧及び編集の制限が可能です。(PHPの制限により基本的には、「ApacheモジュールでPHPが実行されている」場合にしか利用できません。詳しくは、PHP による HTTP 認証 - PHP Manual http://jp2.php.net/manual/ja/features.http-auth.php をご覧ください) PukiWiki 1.5.1からは、他の認証方式も選択できるようになっています。pukiwiki.ini.phpの中の以下の部分を書き換えて設定してください。
$auth_users = array( 'Group1' => 'hogehoge', // 閲覧許可グループ名 => パスワード 'Group2' => 'hegehege', // 編集許可グループ名 => パスワード ); $auth_method_type = "pagename"; // ページ名で制限する $read_auth = 1; // 閲覧制限を有効にする (0で無効) $read_auth_pages = array( '/^:.*$/' => 'Group1', // 閲覧制限の対象ページ(正規表現) => 閲覧許可グループ名 ); $edit_auth = 1; // 編集制限を有効にする (0で無効) $edit_auth_pages = array( '/^.*$/' => 'Group2', // 編集制限の対象ページ(正規表現) => 編集許可グループ名 ); $search_auth = 1; // 本文の検索対象を閲覧可能ページだけに制限する (0で無効)上の例では、すべてのページの編集に認証が必要、「:」で始まるページ名のページの閲覧に認証が必要となります。
参考までに他にもいくつか具体例を以下に示します。
- 閲覧は誰でも自由に、編集だけ制限する
$read_auth = 0; $edit_auth = 1;- 全ページに編集制限をかけるが、「☆」で始まるページ名だけは編集制限なし
$edit_auth_pages = array( '/^[^☆].*$/' => 'Group2', // 編集制限の対象ページ(正規表現) => 編集許可グループ名 );- 全ページに編集制限をかけるが、「ゲストブック」「練習」「掲示板」だけは編集を許可
$edit_auth_pages = array( '/^((?!^(ゲストブック|練習|掲示板)$).)*$/' => 'Group2', // 編集制限の対象ページ(正規表現) => 編集許可グループ名 );
Q.続き
ページ単位ではなく全体のページに認証をかけたいんですが、全てのページ名を下の所に書かないといけないの?$edit_auth_pagesA. pukiwiki.ini.phpの設定で以下のように書き換えてください。
$edit_auth_pages = array("/.*/" => "hoge");認証に関する上の質問も参照してください。
A1. 設定している認証方式($auth_type)に対応しているアカウント情報の設定( $auth_users など)、ユーザー名やパスワードなどが正しいかを確認してみてください。
- Reference: PukiWiki/Authentication
A2. 設定が正しいのに機能しない場合、利用しているサーバー環境が原因の可能性があります。phpinfo() 等でServer API の値を調べ、PHP の動作モードを確認してください。
例えば、Basic認証なら「ApacheモジュールでPHPが実行されている」などの環境に制限されています。
IISでPHPを稼動している場合、サーバーおよびPHPの設定が適切でないとPukiWikiのユーザー認証が機能しません。また、古いPHPでは一部の環境での制約により利用できない場合があります。
PukiWiki 1.4.2まではPukiWiki側の対応が不完全なので、一部の環境ではBasic認証が正常に動作しません。
A. 続・質問箱/11
A. メニュー用のページは、トップ用のページと別になっています。Q. 左サイドに表示される内容を変更したい を参考にしてください。
A1. 1.4 系では、HTML エンティティ文字のパターンを記録しているキャッシュファイル(cache/entities.dat) が、正しくアップロードされているか、文字コードが正しいかなどを確認してください。
A2. 1.3 系では、ユーザー定義を追加しないと文字参照と数字参照を使えません。Q. ©で「コピーライトマーク」を表示させたい や、Q. 行頭の'-'や'*'をそのままの文字で表示したい場合にはどうすればいいの? を参考にしてください。
A. 凍結機能では、凍結を解除している間に、誰かに編集されてしまう可能性があります。
PukiWiki 1.4系には、凍結機能のほか、認証による閲覧制限機能や編集制限機能があります。編集制限機能で、ご希望通りの使い方が可能です。認証に関する上の質問も参照してください。
A. wiki/*.txtが問題のページと他のページでパーミッション/オーナーが異なるか確認して下さい。 あるいはMod-Layoutの干渉によってLocationがうまく動かない状態でないか、またpukiwiki.phpの300行目あたりのLocationをコメントアウトしても同じ現象になるか確認してください。
広告が自動挿入されるタイプのフリーサーバーなどで、この現象が起こる場合は、広告を自動挿入せずに手動で挿入する形(.htaccessでLayoutIgnoreURI *を使う)をとって下さい。
なお、更新をメールで通知するオプションをオンにしているにもかかわらず、メールサーバーの設定が上手くいっていない場合にも起こることがあります。
A 続・質問箱/8
A. PukiWiki 1.3.x の場合は改造が必要になります。dev:BugTrack/111を参照してください。
PukiWiki 1.4.x の場合は標準で機能がついています。pukiwiki.ini.phpの中の以下の部分を設定してください。//////////////////////////////////////////////// // Mail related settings // Send mail per update of pages $notify = 0; // Send diff only $notify_diff_only = 1; // SMTP server (Windows only. Usually specified at php.ini) $smtp_server = 'localhost'; // Mail recipient (To:) and sender (From:) $notify_to = 'to@example.com'; // To: $notify_from = 'from@example.com'; // From: // Subject: ($page = Page name wll be replaced) $notify_subject = '[PukiWiki] $page'; // Mail header // NOTE: Multiple items must be divided by "\r\n", not "\n". $notify_header = ''; ///////////////////////////////////////////////// // Mail: POP / APOP Before SMTP // Do POP/APOP authentication before send mail $smtp_auth = 0; $pop_server = 'localhost'; $pop_port = 110; $pop_userid = ''; $pop_passwd = ''; // Use APOP instead of POP (If server uses) // Default = Auto (Use APOP if possible) // 1 = Always use APOP // 0 = Always use POP // $pop_auth_use_apop = 1;ただし、php.iniでPHPからのメールが送信される設定になっていなければなりません。また、fromにはメールアドレスであれば何を入れてもよいですが、自ドメインのアドレスでないと発信しない場合もあります。
A. 1.4.6_alphaから、ページの更新だけでなくファイルの添付でもメール通知が行われるようになりました。
それ以前の環境は、こちらをご覧下さい。dev:PukiWiki/1.4/ちょっと便利に/ファイルの添付・削除時にメールでお知らせ
Q.続き
複数でページの更新をしていないのに「更新の衝突」が出てしまい、ページの更新ができません。「更新の衝突」のとき、そのまま「ページの更新」を押しても、更新前のページ内容のままです。もう一度、更新しようとすると、再び「更新の衝突」となり、さきほど更新した内容と出てきます。
A. 「複数でページの更新をしていないのに、『更新の衝突』が出てしまい」ことですが、たとえ1人しか更新作業を行なっていなくても、ブラウザの「戻る」や「リロード」を実行した場合には「更新の衝突」が発生したり、(コメントなど)二重投稿になったりします。ブラウザの「戻る」で編集画面(コメント入力なども含む)に入って更新すると、自分自身が行なった直前の更新と衝突します。PukiWikiの編集中や編集後にブラウザの「戻る」や「リロード」を使わないようして下さい。
またキャッシュが原因なら、スキンファイル(pukiwiki.skin.ja.phpなど)の先頭部分を下記のように書き換えて試してみてください。
<?php if (!defined('DATA_DIR')) { exit; } ?> + <?php header('Cache-control: no-cache') ?> + <?php header('Pragma: no-cache') ?> <?php header('Content-Type: text/html; charset=EUC-JP') ?> <?php echo '<?xml version="1.0" encoding="EUC-JP"?>' ?>
A. lib/html.phpの208行目付近の以下の部分を消してください。
if (array_key_exists('refer',$vars) and $vars['refer'] != '') { $refer = '[['.strip_bracket($vars['refer'])."]]\n\n"; }1.4.5 以降は、次のような形になっています。(1.5.1時点では279行目付近)
if (isset($vars['refer']) && $vars['refer'] != '') $refer = '[[' . strip_bracket($vars['refer']) . ']]' . "\n\n";
A. 続・質問箱/38
A. 以下の手順を試してみてください。
- 一度、showhtml で、キャッシュに落とす
- 作成したいページを決める。
- 必要な画像ファイルを ./attache に、ページ名を付与したネーミングに変更する
- キャッシュの html を、自作プラグインなどの利用も考えてテキストに変換
- 変換したテキストを ./wiki に保存する
PukiWiki/関連ツールも参照して下さい
A. 不可能ではないですが、お勧めできません。
PukiWikiの仮想ディレクトリを実現するページ名のスラッシュを、ファイルシステム上ディレクトリのセパレータとして認識してしまう場合には、ファイル名として生成できなくなります。また、素の文字列を期待していないようなロジックがあれば、確実に挙動がおかしくなるでしょう。
ただ、func.php 内に定義されている encode() と decode() のユーザ関数を、多くの php ソースで利用して、ファイル名の生成・復元をしているので、func.php 内のこれら関数の挙動を修正してしまえば、一応実現はできます。
A. 既存のページのページ名変更にはrename プラグインを使ってください。そのページへのリンクも同時に一括で簡単に変更する方法はまだありません。yetlist プラグインでリンク切れをチェックして、変更したページへのリンクが切れたページを一つ一つ編集してください。
shellが使える場合は、wikiのデータはプレーンテキストなので sed するか、Windowsならcygwinで、または秀丸などで全置換してください。ただし、正規表現に手慣れてないと、置き換えてはいけない文字列まで置き換えてしまう危険性もあるので、注意してください。全置換の自作プラグインも公開されています。
A. nkf, qkc など、コード変換ツールは世の中にいくらでもありますので、そういったものを使って変換することをお薦めします。スクリプト等を使えば、自動化もできます。どうしてもという場合は以下のパッチを適用してみてください。ページデータを読み込む際に、コード検出&変換を行います。任意のコードで、ページデータ(wiki/*.txt)を書くことができます。但し、日本語部分が非常に短いページでは、コード検出に失敗し、文字化けするおそれがあります。
Index: file.php =================================================================== RCS file: /cvsroot/pukiwiki/pukiwiki/file.php,v retrieving revision 1.25 diff -c -r1.25 file.php *** file.php 13 Jun 2003 00:53:33 -0000 1.25 --- file.php 2 Jul 2003 03:45:30 -0000 *************** *** 19,25 **** { $lastmod_time = $filetime; } ! return str_replace("\r",'',file(get_filename($page))); } // ページの更新時刻を得る --- 19,27 ---- { $lastmod_time = $filetime; } ! $tmparray = str_replace("\r",'',file(get_filename($page))); ! mb_convert_variables(SOURCE_ENCODING, 'auto' , $tmparray); ! return $tmparray; } // ページの更新時刻を得る
A. sakazuki氏作のrd2pukiwiki(http://homepage2.nifty.com/sakazuki/rd2pukiwiki.html)をご利用下さい。
Q.続き
ページを更新したからといってバックアップされる訳でもないみたいですし、どのようなタイミングでバックアップされるのでしょうか?
A. pukiwiki.ini.php に
// 定期バックアップの間隔を時間(hour)で指定します(0で更新毎) $cycle = 6;のような定義がありますので、ここを適宜変更して利用して下さい。
Reference 質問箱/1
A1. ページ単位のバックアップのリストアの場合は、以下の手順でリストアしてください。
- ページ上部のメニューのバックアップ
- リストアしたい履歴のソースを選択
- ソースをコピー
- ページを編集して貼り付け
A2. コピペを使わずに半自動で差し戻す機能は、dev:BugTrack/507 などで検討中です。
A1. サーバのshellが使えるのなら、wiki ディレクトリをtar で書庫ファイルにし、ファイル名をローカル側のOSで使えるものにしてからダウンロードしてください。
wiki テキスト以外のデータもバックアップしたい場合は、該当するディレクトリも同様に保存してください。デフォルトなら、Q. 2つのPukiWikiを同期させたい で示されているディレクトリを保管すれば、その時点の全データを復旧できるようになります。
ただし、ローカル側で書庫ファイルを解凍してしまうと、「ローカル側のファイルシステムの制限により、字数制限で途中で切られたり使用禁止文字が除かれたりしてファイル名が重複してしまい、ファイルが欠損する」などの問題が発生する場合がありますのでご注意ください。A2. 1.4.5 以降であれば、dump プラグインを使うという方法もあります。
ローカル側で解凍する場合の注意点は、A1. と同じです。
A. html.phpの36行目あたりを以下のように修正してみてください。
-$link_edit = "$script?cmd=edit&page=".rawurlencode($vars["page"]); +$link_edit = "$script?cmd=edit&help=true&page=".rawurlencode($vars["page"]);
A. dev:BugTrack/421をご利用下さい。
Q.続き
例えば、「http://総務省.jp」などの日本語ドメインをPukiWikiに認識させるにはどうすればよいのでしょうか?
- 日本語ドメインの関連サイト
- JDNA http://www.jdna.jp/
A. lib/make_link.php をカスタマイズすると可能です(ただし、自己責任)
※以下の例は、PukiWiki 1.4.7の場合です。その他のバージョンの場合は、適宜読み替えて下さいlib/make_link.php の like_urlクラスの get_patternメソッドの戻り値を変更します。 1.4.7の場合、363行目です
class Link_url extends Link { ... 中略 ... function get_pattern() { $s1 = $this->start + 1; return <<<EOD (\[\[ # (1) open bracket ((?:(?!\]\]).)+) # (2) alias (?:>|:) )? ( # (3) url (?:(?:https?|ftp|news):\/\/|mailto:)[\w\/\@\$()!?&%#:;.,_~'=*+-]+ //この行を変更 ) (?($s1)\]\]) # close bracket EOD; } ... 続く ...以下のように変更
変更前 : (?:(?:https?|ftp|news):\/\/|mailto:)[\w\/\@\$()!?&%#:;.,~'=*+-]+ 変更後 : (?:(?:https?|ftp|news):\/\/|mailto:)[a-zA-Z0-9ぁ-ヶ亜-黑\/\@\$()!?&%#:;.,_~'=*+-]+※2008 6/23 先の正規表現に _ (アンダースコア)が抜けておりましたので修正いたしました
※違う文字コードで使う場合、正規表現の「亜-黑」の部分を変更しなければ正常に動作しない場合があります。(例えばUTF-8では、画数の少ない漢字から文字コードのリストに登録されているので、上の例のままだといくつかの漢字が対象に含まれなくなります)
- 関連: dev:BugTrack/438
A. 同期に関しては、wiki, diff ,attach, cache, backup, counter ディレクトリを同期させればいいです。
A. 運用可能です。ただし、新規や編集、書き込んでも何も表示されない場合は、Q. ドメインのアドレスが違うものになり、新規・編集などが行えない を参考にして、pukiwiki.ini.php 内の$script を設定してみて下さい。
A. 続・質問箱/27
A. 負荷対策のまとめ(dev:BugTrack/763)を参考にして下さい。
A. Q. PukiWiki の動作が重くなったので、どうにかしたい を参考に、動作の重い機能を使わないように設定を変更してみてください。
また、既知のバグが原因である可能性があるので、なるべく最新のパッケージをダウンロードして利用してください。それでも解決しない場合、まずはQ. 設置後にアクセスすると画面が真っ白になって、エラーメッセージが何も表示されない を参考にエラーを確認できるようにしてください。(エラーログでも可)
次に、どんなエラーがどのファイルを使っているときに出ているのかを調べましょう。
そして、その情報が各質問箱 やBugTrack にすでにあるかを確認してください。(すでに解決しているバグであってもリリースの都合上、まだパッケージ化されていない場合があります)
- 簡易ヒント
- メモリや実行時間に起因するエラーの場合
- 扱うデータ量などを少なくするために、さらにいくつかの機能をあきらめるか、その機能を設計から見直したりバグ出しをする必要があります。
- バックアップが原因の場合
- PukiWiki のバックアップデータは「各世代のフルバックアップ」という構成ですので、記録する世代数を減らせばその分、展開に必要なメモリを少なくすることができます。(長文を扱う場合は特に)
ただし、極端に減らしすぎるとその分spam からの復旧が困難になる可能性もあるので注意が必要です。- Q. ページ当たり文字数の制限が編集時と違うようですが も参考にしてください。
- AutoLink を使っている場合
- Q. AutoLink が正常に作動しない を参考にしてください。
- Location などのHTTP ヘッダーが出力されない(動作しない)場合
- エラーメッセージや本文などが先に出力され、ヘッダーの出力が無効になっている可能性があります。Q. Warning: Cannot modify header information - headers already sent by ( ~ ) を参照して下さい。
Q.続き(不具合の詳細)
AutoLink の対象ページ数が増えてくると、
- 編集後の記録時に真っ白なページが表示されて、閲覧ページに戻らなくなる
- 閲覧時に、本文やメニューが表示されなくる
- リンクされるべき所がリンクされなくなる
などの症状が出る(または、症状に加えてPHP のエラーが表示される)
A. 対象ページが増えてくると、編集後の検索パターン生成時や、閲覧時のリンク対象の検索時に、メモリ消費量や必要な実行時間が増大し、PHP かサ-バの設定条件を超えてしまうと実行を強制的に停止させられてしまいます。
サーバに余裕があるのならば、設定(PHP ならば、memory_limit やmax_execution_time )を調整する方法もありますが、
さらにページを増やす予定が場合や設定を変えられない場合など、基本的にはAutoLink をOFF にして、BracketName に書き換える対応をしてください。
A. dev:BugTrack2/114を参考にして下さい。
A. iframeで表示する事は可能です。 完全に"取り込む"ことは現在のHTMLの仕様により出来ないです。
A. dev:BugTrack2/73(weblogUpdates.ping送信の実装)をご覧下さい。
Q.続き
×××社の△△と申します。 上記URLに、弊社の者が誤って内部文書を書き写していたことが 解りました。弊社側のログから実行者は特定しております。 大変お手数ですが、貴サイトの該当コンテンツから、該当部分の 削除をお願いできませんでしょうか。このようなメールが届きました。どのように対応すべきでしょうか。
A. 対応する場合、管理者にしかできない事、すなわちdiff/backupの削除を実施し、他のページにもないかどうか引き当てを行うと喜ばれます。
- 申請者や申請内容が妥当であるかどうか、裏付けを取ってください。
- Webサーバーのログや、メールで届く通知の履歴から、該当の書き込みがいつごろ、どのIPアドレスから投稿されたのかを明確にして下さい。余裕があれば同様のものが他にないか探索して下さい。
- 対処すべき範囲(例えばページ削除、例えばコンテンツの部分削除)が妥当であるかどうか確認して下さい。
- ページ削除で良い場合:
- そのページを削除
- そのページの差分を削除
- そのページのバックアップを削除 (※一部の世代だけ削除する機能は1.4.7 現在、存在しません)
- 部分削除の場合:
- 部分的に削除
- そのページの差分を削除
- そのページのバックアップを削除
- 完了通知、そのほかに解った事があればその報告を行ってください。
Q.続き
○○○という(PukiWikiを使用している、第三者による)サイトにより○○○のような迷惑を受けています。どうにかなりませんか。A.
- PukiWiki公式サイトでケアできる範囲を超えています。ケースに応じた対応をご自身で誠実に行ってください。
- どのような件でどのように困っているのかを客観的に、かつ明確にまとめて下さい。
- Webサイトの管理者への連絡手段があるようであれば、直接連絡を試みて下さい。
- 連絡手段が(調べても)見つからない場合、Webサーバーの管理者に(その連絡先を調べて)、困っている点を添えて、Webサイトの管理者と連絡が取れないかどうか相談して下さい。
- それも見つからない場合、そのドメインの管理者に(その連絡先を調べて)、困っている点を添えて、Webサイトの管理者と連絡が取れないかどうか相談して下さい。
- 調査方法がわからない時は、身近な信頼のできる方に、(お互いの就業時間外に)相談して下さい。
- 犯罪にかかわると考えられる事案の場合は、警察署やサイバー犯罪相談窓口(http://www.npa.go.jp/cyber/soudan.htm)、インターネット・ホットラインセンター(http://www.internethotline.jp/)や一般社団法人セーファーインターネット協会(http://www.safe-line.jp/)など有害情報の通報受付団体、まで相談して下さい。ただし、あなたが冤罪の加害者とならないよう、慎重かつ誠実に相談して下さい。
- 「問題である」という、その具体的なURLをこちらに書き込まれた場合、情報の暴露/拡散を意図した悪意ある書き込みとみなします。