- これはPukiwikiをベースに,Markdownが利用できるように変更を行ったソースコードです.
- License: GPL version 3.0
参考:
名前 PukiWiki - 自由にページを追加・削除・編集できるWebページ構築スクリプト
Version 1.5.4 Copyright 2001-2022 PukiWiki Development Team 2001-2002 yu-ji (Based on PukiWiki 1.3 by yu-ji) License: GPL version 2 or (at your option) any later version
URL: https://pukiwiki.osdn.jp/ https://pukiwiki.osdn.jp/dev/ https://osdn.jp/projects/pukiwiki/
書式 index.php index.php?PAGE_NAME_ENCODED index.php?plugin=PLUGIN_NAME
概要 PukiWiki(ぷきうぃき)は、ハイパーテキストを素早く自由に追加・削除・編集で きるWebアプリケーション(Wiki, WikiWikiWeb)の一つです。テキストデータから HTML を生成することができ、そのテキストはWebブラウザから何度でも修 正することができます。それぞれのページは自然にハイパーリンクで結びつける ことができます。
PukiWikiはグループ間の知識の共有に用いることができますが、個人が自分のた めのアイデア帖や日記ツールとして活用することも可能です。また、管理者に だけ「簡単に編集できる」利点を残したまま、閲覧者に対して「編集のできない Webサイト」として情報を提供する構成も可能です。(この場合、Wiki風のデザイ ンである必要すらありません)
PukiWikiはPHP言語で書かれたプログラムなので、PHP(PHP4.1 - PHP8.1)が動作す るWebサーバーであれば容易に設置でき、軽快に動作します。
PukiWikiは、yu-jiさんを含む PukiWiki Development Team やその貢献者が、各自の 著作物にGPLバージョン2(または あなたの選択で それ以降のGPL)を適用してい る「フリーソフトウェア(自由なソフトウェア)」です。最新版はPukiWiki公式サイ トから入手できます。
ページの作成、編集、削除、復旧
- 「新規」のリンクからページ名(まだそのWikiに存在していないもの)を入力し たり、既存のページを表示した状態で「編集」のリンクをたどったり、そのペー ジが置かれるはずのURLに直接アクセスすると、テキストの入力ができる状態に なります。
※「凍結」されていたり、「編集が禁止」されている場合は、リンクが存在し なかったり、そのようなメッセージが表示されるでしょう
- テキストを入力(ないし修正)し「保存」すると、そのテキストはサーバーに保 存され、すぐに「そのテキストを元にしたWebページ」が表示されます。 「編集」は何度でも繰り返す事ができます。
- テキストの中に、「大文字始まりの英単語が二つ以上連結された単語」(例え ば”NewPage”)や、二重のブラケットで囲まれた語句(例えば新しいページ) があった場合、その語句は背景が変化し、末尾に ‘?’ という小さなリンクが挿 入されます(未解決のリンク)。 この装飾は「(表示した時点では)その名前のペ ージが存在していなかった」ことを示しています。もしもその名前のページが 存在しているならば、その語句の部分は「その名前のページ」を指し示すハイ パーリンクになります。
- テキストを全て削除してから「保存」することで、そのページを削除すること ができます。いたずらを検知するため、削除された事実は専用のページ RecentDeleted に記録されます。
※削除した理由が明確でない場合、他の参加者はそのページを復旧させること ができます。
- テキストの編集履歴は自動的に記録されます。設定によりますが、編集履歴の 保存は既定の時間が経過するか、毎回編集するたびに行われます。保存された データがあるならば、それを使いコンテンツを当時の状態に復旧することがで きます。編集履歴データを完全に削除することは管理者にしかできません。
テキストの整形ルール テキストをWebページ(HTML/XHTML)としてうまく出力させるため、「どのようなテ キストを書くと、どのようなHTML/XHTMLになるのか」、という部分に一定のルール (書式)が決められています。こちらについては help FormattingRules の ページを参照してください。
テキストに書き込んだ「HTMLエンティティ(HTMLにおいて、特殊な文字を表示させ るためのエスケープ文字列のようなもの)」はほぼそのまま表示されます。一部の 文字は、HTMLエンティティで記述する必要があるかもしれません。 (例: “&” => “&”)
テキストデータでの改行を、XHTMLの出力でもそのまま改行(<br />)として反映さ せたい場合、あるいは行間を空けたい場合:
- 設定 $line_break の内容を切り替えることで全体の動作が変わります
- #setlinebreak プラグインで行単位に操作する事が可能です
- 行末に “~” を追加すると、その行の改行が無視されなくなります
- brプラグイン(&br;) を文中に追加すると、そこで改行します
- brプラグイン(#br) で、一行分の空間を空けることができます
WikiName (大文字始まりの英単語が二つ以上続いた単語) に対する自動リンク機 能を無効にするには、設定 $nowikiname の内容を切り替えて下さい。
AutoLink (既存のページに対するリンクを自動的に作成する機能)を無効にした り、有効とみなすページ名のバイト数を修正する場合、設定 $autolink の値を 修正して下さい。
ページの編集を禁止するには 以下のような方法があります。
- 定数 PKWK_READONLY により、PukiWiki全体を書き込み禁止にする これは閲覧専用のPukiWikiを用意するためのオプションです。 既存のPukiWikiのミラーサイトを構築したり、情報提供用のサイトを構築するた めに活用することができます。有効/無効にするためには管理者による設定変更 が必要です。 (詳しくは: BugTrack/744)
- 編集認証($edit_auth)により、指定したパターンに合致するページの編集を禁 じる 指定したパターン(例えば “Aで始まるページ名”)に合致するページに対し、特定 のアカウントにだけ編集を許可するためのオプションです。 ユーザーの設定などは管理者による設定変更が必要です。 編集認証は「ページの中身」「ページ名」いずれかに対してかける事ができま す。パターンの指定は正規表現で行います。
- 「凍結」機能により、ページ単位に編集を禁じる/許可する 凍結/凍結解除には管理者パスワードが必要です。 ページを書き換えるプラグイン(例: #comment プラグイン)は凍結されたページ の中でも動作しますので、それらをページに含めた場合、管理者が定期的にそ のページをクリンナップする必要があるかもしれません。
- 指定したページの編集を禁じる($cantedit) ページ名を事前に指定しておく事により、通常の操作によるそのページの編集 を禁じる事ができます。RecentChangesなどはこの機能を利用しています。 設定を追加/削除するためには管理者による設定変更が必要です。
ページを秘密にする、パスワードを秘密にする PukiWiki全体を秘密の場所に置くことは簡単です。認証や暗号化をかける場合、 そのWebサーバーに関する知識が必要です。
- Webサーバーの機能によって、PukiWikiを設置しているフォルダにベーシック 認証や、ダイジェスト認証などをかけることができるでしょう。
- Webサーバーの機能によって、SSL(TLS)で通信経路を暗号化することができる でしょう。これによってベーシック認証のパスワードやコンテンツを盗聴され たり、何らかのきっかけでそれらが漏洩する可能性を低下させることができま す。
PukiWikiのコンテンツを「部分的に」秘密にするためには、PukiWikiの複数の設 定やプラグインに関する知識が必要です。以下にいくつかの注意点をまとめます。
- 公開用の入り口(index.php)とは別に編集用の入り口(例えばsecret.php)を用 意し、それぞれの設定を調整/改造することができます。
例:
- 公開するPukiWikiの編集を PKWK_READONLY で禁止する
- 編集用の入り口では、編集認証と閲覧認証を全てのページ名に適用する (正規表現では ”)
- 編集認証($edit_auth) と 閲覧認証($read_auth) を利用する場合、それぞれ の対象が一致するように設定する必要があります。例えば閲覧認証だけをかけ ている場合、編集行為によってコンテンツが漏洩する可能性があります。
- MenuBarやヘッダ/フッタは、編集認証/閲覧認証の影響を受けません。 (詳しくは:続・質問箱/11)
- 他のページを雛型としてロードする機能($load_template_func)は、閲覧認証 の影響を受けません。現状の回避策は、この機能を無効にすることです。 (詳しくは:BugTrack/598)
- あまり利用されていない一部のプラグインは、編集認証/閲覧認証に対応して いません。そのためにページのコンテンツやページ名が漏洩する可能性があり ます。編集認証/閲覧認証に頼る場合はこれらを事前に削除する必要がありま す。(例:BugTrack/511)
プラグインについて プラグインを組み込むことで、PukiWikiに様々な機能を追加/拡張することができ ます。PukiWikiには70を越える標準添付のプラグインの他に、多数の自作プラグ インが存在しています。
プラグインのスタイルは大きく分けて三種類あります。多くはWebコンテンツ(静 的なもの/動的なもの)を出力しますが、それ以外の動作をするものも存在します。
ブロック型プラグイン(block/convert) 行単位に特殊なWebコンテンツを挿入するものです。 ※コメント欄(#comment)、目次(#contents)、配下のページを一覧(#ls2)、最 新のN件(#recent)、ページのインクルード(#include)、投票ボックス (#vote)など
インライン型プラグイン(inline) HTMLエンティティを拡張した文字列をテキストの途中に挿入することで、 文章の途中にWebコンテンツを挿入するものです。 ※文章の色と背景色の操作(&color(red,yellow){文字列};)など
アクション型プラグイン(action) プラグインごとに独自の効果を発揮するものです。 ※Wikiページの表示(read)、RSSの出力(rss)、ページ名の変更(rename)など
文字列置換ルール いくつかの機能は、プラグインではなく文字列の置換か、それとの組み合わせに よって実現されています。
テキストを表示する際にWebコンテンツと置き換えるタイプ ※ハートマーク(&heart;)の描画、顔文字を画像に置き換える機構など
テキストを保存する瞬間に置き換え、結果を保存するタイプ ※&now; を、「その時の現在時刻」に置き換える機構など
InterWikiについて InterWiki とは、WikiとWikiをつなげる機能です。例えば Wikiサイト名:ページ名 このように記述することで、そのWikiの特定のページに対するリンクを簡単に出力 させる事ができます。 ※Wiki以外のサイト、例えば検索エンジンへのURIを生成することも可能です
InterWikiを活用したテキストフォームは #lookup プラグインによって作成するこ とができます。
この機能は Tiki からほぼ完全に移植されています。 詳細は InterWiki のページを参照してください。
Wikiの様子を見る Wikiの更新状況(更新された順に並べた一覧)は RecentChanges という特殊なペー ジからチェックすることができます。
#recentプラグインはこの内容をコンパクトなリストとして表示します。 ※デフォルトでMenuBarに追加されています
rssプラグインはこの内容をRSSのフォーマットで提供することができます。 出力方法の例: RSS 0.91 index.php?plugin=rss RSS 1.0 index.php?plugin=rss&ver=1.0 RSS 2.0 index.php?plugin=rss&ver=2.0
関連項目 INSTALL.txt (インストールとアップグレード)
標準添付されているプラグインの簡潔な説明は、PukiWiki/1.4/Manual/Plugin のページを参照して下さい。
その他、リリース版の基本的な使い方に関する情報はPukiWiki公式サイト をご覧下さい。以下のようなコンテンツが特に有用です。
FAQ https://pukiwiki.osdn.jp/?FAQ 質問箱 https://pukiwiki.osdn.jp/?%E8%B3%AA%E5%95%8F%E7%AE%B1
バグ PukiWikiのセキュリティに関する情報は以下でまとめられています。 https://pukiwiki.osdn.jp/?PukiWiki/Errata
バグ報告は devサイトまでお願いします。 (我々はPukiWikiでPukiWikiのバグトラッキングを行っています) https://pukiwiki.osdn.jp/dev/?BugTrack
歴史 PukiWikiは、結城浩さんが作られたYukiWikiの仕様を参考に独自に開発されまし た。PukiWiki バージョン1.3まではyu-jiさんが個人で製作していました。
バージョン1.2.1 から、RecentChangesのRDF/RSSを出力できるようになりました。
バージョン1.3.1b 以降はPukiWiki Development Team によって開発が続けられて います。
バージョン1.4.5 から、RSS 2.0 を出力できるようになりました。
謝辞 PukiWiki Development Teamの皆さん、PukiWikiユーザの皆さんに感謝します。 PukiWiki を開発した、yu-ji(旧sng)さんに感謝します。 YukiWiki のクローン化を許可していただいた結城浩さんに感謝します。 本家のWikiWikiを作ったCunningham & Cunningham, Inc.に 感謝します。
- yu-jiさんのホームページ https://factage.com/yu-ji/
- 結城浩さんのホームページ https://www.hyuki.com/
- YukiWikiホームページ https://www.hyuki.com/yukiwiki/
- Tiki https://tiki.org/
- 本家WikiWikiWeb https://wiki.c2.com/?WikiWikiWeb
- WikiWikiWebの作者(Cunningham & Cunningham, Inc.) https://c2.com/
名前 PukiWiki - 自由にページを追加・削除・編集できるWebページ構築スクリプト
Version 1.5.4 Copyright 2001-2022 PukiWiki Development Team 2001-2002 yu-ji (Based on PukiWiki 1.3 by yu-ji) License: GPL version 2 or (at your option) any later version
インストール PukiWikiはPHPスクリプトであるため、(例えばPerlのように)スクリプトに実行権 を付ける必要はありません。CGI起動でないのであれば、スクリプトの一行目を修 正する必要もありません。
Webサーバーへのシェルアクセスが可能であれば、PukiWikiのアーカイブをそのま まサーバーに転送し、サーバー上で解凍 (unzip pukiwiki-*.zip) するだけで パーミッションの設定も行われ、すぐに使い始める事ができるでしょう。
スクリプトの中の日本語は(あれば、基本的に)UTF-8で、また改行コードはLFで 記述されています。スクリプトを直接編集する場合は、日本語文字コードと改行 コードの自動判別ができ、それを元のまま保存できるテキストエディタを使用し て下さい。
以下に、事前にクライアントPCで作業を行う場合の例を記します。
- PukiWikiのアーカイブを展開します。
- 設定ファイル(*.ini.php)の内容を確認します。何も修正せずとも動作します が、公開された場所に設置するのであれば、念のため事前に管理者パスワード を修正して下さい。
設定ファイルのほとんどの項目は pukiwiki.ini.php に集約されています。
全体設定 : pukiwiki.ini.php ユーザ定義 : rules.ini.php
その他、ユーザーエージェントごとの設定が用意されています。
デスクトップPC : default.ini.php 携帯電話およびPDA : keitai.ini.php
PukiWikiの管理者パスワードは、pukiwiki.ini.php にある変数 $adminpass です。簡単に試すだけであるならば、以下のような内容で充分でしょう。 (‘YourPassWord’ の部分を、あなただけのキーワードで置き換えて下さい)
$adminpass = ‘{x-php-md5}’ . md5(‘YourPassWord’);
※設定を「有効にする」とは、多くの場合、設定値を数字の 0 でない値(例え ば1)にする事です。一部の設定は名前に DISABLE ないし $noXXX とあります が、それらは値を 0 でないものにすることで、その設定値に対応する機能が 無効になります。(無効にする役割が有効になります)
※インターネットに公開するPukiWikiであるならば、PKWK_SAFE_MODE を有効に することをお薦めします。(詳細:BugTrack/787)
※他人に編集させない環境をご要望であれば、PKWK_READONLY を有効にするこ とをお薦めします。(詳細:BugTrack/744)
- ファイルをFTPなどでサーバに転送します。 基本的に何の変換も行わず、「そのまま」転送して下さい ・ファイル名や、ファイル名の大文字小文字などを変更しないで下さい ・FTPの転送モードは「バイナリ(bin)」を使用して下さい
- サーバ上のファイルおよびディレクトリのパーミッションを確認します。 専用サーバーの場合の例を以下に例を示します。 共有サーバーで他のユーザーからの読み書きを禁止したい場合は 777->771, 755->750, 644->640, 666->660 等、適切なパーミッションを設定してください。
ディレクトリ パーミッション attach 777 添付ファイル格納ディレクトリ backup 777 バックアップファイル格納ディレクトリ cache 777 キャッシュファイル格納ディレクトリ counter 777 カウンタファイル格納ディレクトリ diff 777 差分ファイル格納ディレクトリ image 755 画像ファイル image/face 755 (画像ファイル)フェイスマーク lib 755 ライブラリ plugin 755 プラグイン skin 755 スキン、CSS、JavaScirptファイル wiki 777 データの格納ディレクトリ
ファイル パーミッション .htaccess 644 .htpasswd 644 */.htaccess 644
ファイル パーミッション .php 644 */.php 644 attach/* 666 (はじめは存在せず) backup/*.gz 666 (インストール時は存在せず) backup/*.txt 666 (多くの環境では存在せず) cache/* 666 (一部のプラグインはバイナリファイルを保存します) counter/* 666 (はじめは存在せず) diff/*.txt 666 (はじめは存在せず) wiki/*.txt 666 image/* 644 image/face/* 644 lib/* 644 plugin/* 644 skin/* 644
- サーバーに設置した PukiWiki の index.php に、Web ブラウザからアクセスし、 PukiWikiが動作するか様子を見ます。
※エラーが出る場合: 下記を参照して下さい
- 必要に応じて、さらに設定やデザインを調整して下さい。
※CSS(外見)は skin/スキン名.css にあります。どのようなCSS が求められているかはスキンに記述されています。 ※スキン(外見の骨組み)に関する設定項目は skin/スキン名.skin.php の先頭に あります。 ※プラグイン独自の設定項目は plugin/プラグイン名.inc.php の先頭にありま す ※tDiaryテーマ(tDiaryスキン)の使用法は BugTrack/769 を参照して下さい。
エラーが出る場合 CGI版のPHPが設置されたサーバー(特にsuExecと組み合わされている環境)で動作 させようとした場合に “Internal Server Error” などと表示される場合がありま す。詳しくはサーバー管理者がPHPスクリプト向けに提供している情報を確認して 下さい。
- 実行するPHPスクリプト ( PukiWikiの場合 index.php ) の 一行目に、PHPバイナリへのパスを追加する必要があるかもしれません。 (例: #!/usr/local/bin/php)この値はサーバーにより異なります。
- たいていの場合、より厳密なパーミッションが求められます。
エラーが出る場合: .htaccessファイル PukiWiki 1.4.4 から .htaccess ファイルを添付する様になっていますが、 Apache Web サーバーの設定によっては “Internal Server Error” を起こす場合 があります。
具体例: Webブラウザに “Internal Server Error” と表示され Webサーバーのエラーログには “order not allowed here” というエラーが記録 される
これはPukiWikiを設置したい場所で .htaccess による設定変更が許可されていな い(特に “AllowOverride Limit” でない)のが原因です。
回避策: .htaccess、および skin/.htaccess を削除する
解決策: Apache設定ファイル(httpd.conf)の、PukiWikiを設置したいディレクトリに関 する部分に “AllowOverride Limit” を追加する
エラーが出る場合: Parse error “Parse error: parse error, unexpected XXXX in .... on line NNN”
PHPスクリプトに矛盾がある場合、このようなメッセージが表示されます。指定さ れているファイルの、指定された行の付近をチェックし、問題があれば修正して 下さい。理由としては以下のようなケースが考えられます。
- 末尾にあったセミコロンを消してしまった
- 文字列をシングルクォートかダブルクォートで囲むはずが、片方を消して しまった / 文字列の中に(文字列を囲んでいるのと同じ)シングルクォート やダブルクォートがある
エラーが出る場合: Runtime error Error message : Directory is not found or not writable (xxx_DIR)
データを書き込むディレクトリ(やファイル)に書き込み権限が無い場合、このよ うなメッセージを表示します。xxx_DIR がどこにあたるかは、設定ファイルで同 名の定数を定義している部分を参照して下さい。
バックアップとリストア ページの最新データを収めているディレクトリ(デフォルトの名前は wiki)以下 を、また必要に応じて他のデータを収めているディレクトリ以下をバックアップし て下さい。(同 attach, backup, cache, counter, diff)
cacheディレクトリもバックアップすることをお薦めします。
- cache/*.rel ファイルと cache/*.ref ファイルは linksプラグイン で再生 成可能ですが、この処理は非常に重く、環境によっては処理が必ず失敗する (中断する)場合があります。
- cache/*.rel ファイルがPukiWikiに全くない時に既存のページを編集すると、 linksプラグインを実行した状態とほぼ同等の負荷がかかります。 (詳細:BugTrack/2056)
- amazonプラグインはここに画像(のキャッシュ)を保存します。
データを配置した時は、ファイルのパーミッションが期待されている通りかどう か、また実際に動作するかどうかを確認して下さい。(例: 配置したページの更新 を試みる)
PukiWiki 1.4.5 以降では、添付されている dumpプラグイン で、wiki/attach/ backup ディレクトリのリモートバックアップ(.tar.gzないし.tar形式)が可能で す。 起動の例: index.php?plugin=dump
dumpプラグインにはdumpプラグインで取得したファイルの中身をPukiWikiに展開す る機能(リモートリストア)も用意されています。ただしファイルに含まれていない データをPukiWikiから削除する機能はありません(常に上書きになります)し、Web サーバーやPHPのアップロードファイルサイズ制限を越えるファイルを利用するこ とはできません。またこの機能はデフォルトで無効になっています。
その他、PukiWikiの更新内容をメールで通知する機能は、既存のデータを失わない ための機能としてとらえる事ができるでしょう。