目次 Edit

Tag: 整理 wiki

概要 Edit

軽量で導入が簡単な国産PHP製wiki、PukiWikiの導入、改造メモ
※Webアプリなので、Apache, IIS, AN HTTPD などの HTTPデーモンソフトと、PHPが必要です。SQLは不要。OSは選びません。自分のPCに導入して使用するか、Xreaなどの機能が豊富なレンタルサーバーで使用する必要があります。詳しい事は割愛。
※総ページ数が3000を超える場合、Wikipediaでも使用されているMediaWikiを使用した方がいいらしい(SQL必須ですが)。軽さと手軽さではPukiWikiが上で、機能、拡張性、将来性などではMediaWikiが上のようです。
階層構造ベース。
以下メモ。※パスは適当に読み替えてください

類似ソフトとの比較 Edit

../MediaWiki#comparison

PukiWiki (1.4.7 UTF-8) 導入、改造メモ Edit

手順 Edit

※パッチは全て最初に当ててください

  1. 公式サイトから「pukiwiki-1.4.7_notb_utf8.tar.gz」をDL
    ※UTF-8なので、日本語は2バイトから3バイトになってしまうが、アドレスバーに日本語をそのままぶちこめるので便利。また、SEO対策にもなる。
    (Firefoxの場合は、about:config で network.standard-url.encode-utf8 の値を true に設定する必要がある)
  2. 「/public_html/hoge/wiki/」に解凍
  3. ディレクトリに偽装 (mod_rewrite) する(しなくてもいいけど、出来るならした方が便利)
  4. 404パッチを当てる(当てなくてもいいけど、した方が便利かも)
  5. SPAM対策をして
  6. プラグインの追加や、改造を行う
    1. 特にParaEdit (パラグラフ単位の編集を可能にする)は超おすすめ [heart] というか必須
  7. SKINを改造
  8. あとは、まぁ適当に設定する 大体これでOK!

設定 Edit

  1. 適当に設定ファイルを編集する (./ のファイルだけではなく、各pluginにも設定項目が有ったりするので注意)
    1. 例えば、PLUGIN_DIR / attach.inc.php には、アップロード可能なファイルサイズの指定、管理者以外のアップロードも許可するかどうか などの設定項目がある
  2. 必須設定
    1. 「/public_html/hoge/wiki/pukiwiki.ini.php」
      1. $adminpass http://host/hoge/wiki/?cmd=md5 で生成した物を設定(入力した文字列が、パスワードになる)

xrea.com に設置する場合 Edit

  1.  ファイルのアクセス権が、0604の様になっていないと不味いらしいので、それぞれ置換する
    1. PLUGIN_DIR, LIB_DIR を xrea でgrep、それぞれ処理
  2. 広告の位置調節 (勿論、有料免除ユーザーの場合は処理する必要なし)
    1. .htaccess に
      LayoutIgnoreURI /prox/wiki/*
      の様な物を追記して、広告を消す
    2. SKIN_DIR の pukiwiki.skin.php の適当な位置(スクロールしなくても表示される位置)に、以下を追記  ※このサイト用の広告です
      <?php  // 【追記/変更】XREAの広告(localhostでは表示しない)
      if ($_SERVER{'REMOTE_ADDR'} !== '127.0.0.1') { ?>
      <script type="text/javascript" src="http://imgj.xrea.com/xa.j?site=abc.s65.xrea.com"></script>
      <noscript><iframe height="60" width="468" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" allowtransparency="true" src="http://img.xrea.com/ad_iframe.fcg?site=abc.s65.xrea.com"><a href="http://img.xrea.com/ad_click.fcg?site=abc.s65.xrea.com" target="_blank"><img src="http://img.xrea.com/ad_img.fcg?site=abc.s65.xrea.com" border="0" alt="xreaad" /></a></iframe></noscript>
      <?php } ?>

EUC-JPからUTF-8への移行 Edit

PukiWiki Plus! のやつだけど、PukiWikiでも使えた。凄く助かりました!
※実行前にバックアップ必須 あと、~などの一部の文字が化けるっぽいので注意

404パッチ Edit

入れてないけど、入れると便利かも。

ディレクトリに偽装 (mod_rewrite) Edit

  1. 上記サイトに従ってパッチを当てたり、.htaccess を弄ったりする
  2. *.orig ファイルを全て削除する

# 便利です。お世話になってます!最高です。作者様に感謝!

HTMLを軽くする為、内部リンクは相対パスにする Edit

ディレクトリに偽装 (mod_rewrite)導入必須(だったと思う $script の設定次第では、導入しなくても良かったかも)

LIB_DIR の func.php

	global $script_directory_index;

を以下に置換

	global $script_directory_index, $xreassl;


		$script  = (SERVER_PORT == 443 ? 'https://' : 'http://'); // scheme
		$script .= SERVER_NAME;	// host
		$script .= (SERVER_PORT == 80 ? '' : ':' . SERVER_PORT);  // port

をコメントアウトして、直後に下記を追記

		$script = '';
		
		// Xrea の SSL 用
		if (preg_match('/ss\d*\.xrea\.com/i', $_SERVER['HTTP_VIA'], $matches))
			$script = $xreassl = 'https://'.$matches[0].'/'.$_SERVER['HTTP_HOST'];


PLUGIN_DIR の aname.inc.php の

	$url     = $f_full  ? get_script_uri() . anchor_replace(rawurlencode($vars['page'])) . '/' : '';

をコメントアウト


PLUGIN_DIR の rss.inc.php の

	$self = get_script_uri();

	$script = get_script_uri();
	$self = (substr($script, 0, 4) === 'http' ? '' : (SERVER_PORT == 443 ? 'https://' : 'http://') . SERVER_NAME . (SERVER_PORT == 80 ? '' : ':' . SERVER_PORT)) . $script;

に置換


PLUGIN_DIR の tracker.inc.php の

		return "[[$title$arrow>$script?plugin=tracker_list&refer=$r_page&config=$r_config&list=$r_list&order=$r_order]]";

		return "[[$title$arrow>" .(substr($script, 0, 4) === 'http' ? '' : (SERVER_PORT == 443 ? 'https://' : 'http://') . SERVER_NAME . (SERVER_PORT == 80 ? '' : ':' . SERVER_PORT)). "$script?plugin=tracker_list&refer=$r_page&config=$r_config&list=$r_list&order=$r_order]]";

に置換

topic_path の Top のリンクを ./ に変更する Edit

PLUGIN_DIR の topicpath.inc.php の

		$topic_path[] = make_pagelink($defaultpage, PLUGIN_TOPICPATH_TOP_LABEL);

をコメントアウトして、下記を追記

		$topic_path[] = '<a href="' .$script. '">' .PLUGIN_TOPICPATH_TOP_LABEL. '</a>';

編集ページ、プレビューをProxomitronなどでバイパスしやすくする Edit

LIB_DIR の html.php の

<form action="$script"

を全て以下に置換

<form action="{$script}index.php"

(ParaEdit 0.6を使う場合、必ずやらないと駄目だったと思う)

SPAM対策 Edit

NG WORD Edit

LIB_DIR の pukiwiki.php の「// Main」の直後に以下を追記

// {{{ 【追記】NG WORD
if (
	// DellWiki の荒らし対策
	preg_match('/[\r\n]-\s*ATI Mobility Radeon X1400(?:(?!64bit)[^\r\n])*[\r\n]/', $post['msg'])
	// SPAM(認証が必要な場合は無効)
	|| (!$edit_auth && preg_match('{\[url=|<a href=}', $post['msg']) && mb_detect_encoding($post['msg']) === 'ASCII')
) {
	header('Conten-Type: text/html; charset=Shift_JIS');
	header('Pragma: no-cache');
	header('Cache-Control: no-store');
	echo '<html><body><h1>ERROR : [DENY ' . $_SERVER{'REMOTE_HOST'} . ' ' . $_SERVER{'REMOTE_ADDR'} . ']</h1>'
	. '※POSTされた内容に多バイト文字が一切含まれず、&lt;a href=、[url=、が含まれる場合、スパムと認識されます<br />'
	. '以下投稿された内容<textarea style="width:100%;height:90%">'.htmlspecialchars($post['msg']).'</textarea></body></html>';
	exit;
}
// }}}

更に「// Main」の後ろにある「$retvars = array();」の直前に以下を追記

// {{{ 【追記】NG WORD(記録自体を書き換える)
//$post["msg"] = preg_replace('/https?:\/\/[^\/]+\.(?:forumer\.pl|worldbreak\.com|carookee\.com|lacoctelera\.com|foros\.net|fs\.fed\.us)[:\/]?[\da-z.\-_\/~?=&%#]*/i', "[SPAM {$_SERVER{'REMOTE_HOST'}} {$_SERVER{'REMOTE_ADDR'}}]", $post["msg"]);
// }}}

Proxy規制 Edit

公式Wikiから引用

<LimitExcept GET HEAD>
	RewriteCond %{HTTP_CONNECTION} !keep-alive [NC,OR]
	RewriteCond %{REMOTE_HOST} ^firewall [NC,OR]
	RewriteCond %{REMOTE_HOST} proxy [NC,OR]
	RewriteCond %{REMOTE_HOST} cache [NC,OR]
	RewriteCond %{REMOTE_HOST} delegate [NC,OR]
	RewriteCond %{REMOTE_HOST} ^dns [NC,OR]
	RewriteCond %{REMOTE_HOST} keeper [NC,OR]
	RewriteCond %{REMOTE_HOST} ^mail [NC,OR]
	RewriteCond %{REMOTE_HOST} ^www [NC,OR]
	RewriteCond %{HTTP_CACHE_CONTROL} DelGate [NC]
	RewriteCond %{HTTP_USER_AGENT} via [NC]
	RewriteCond %{HTTP_USER_AGENT} squid [NC]
	RewriteCond %{HTTP_USER_AGENT} delegate [NC]
	RewriteCond %{HTTP_USER_AGENT} httpd [NC]
	RewriteCond %{HTTP_USER_AGENT} proxy [NC]
	RewriteCond %{HTTP_USER_AGENT} cache [NC]
	RewriteCond %{HTTP:Via} !^$ [OR]
	RewriteCond %{HTTP_FORWARDED} !^$ [OR]
	RewriteCond %{HTTP:X-Forwarded} !^$ [OR]
	RewriteCond %{HTTP:Client-IP} ^$ [OR]
	RewriteCond %{HTTP:Forwarded-For} ^$ [OR]
	RewriteCond %{HTTP:x-forwarded-for} ^$
	RewriteCond DUMMY CONDITION
	RewriteRule ^.*$ - [F]
</LimitExcept>

編集に認証が必要なようにする Edit

★簡単且つ効果抜群 おすすめ

  1. ./pukiwiki.ini.php の 「$edit_auth」を 1 にする。
    1. 「$edit_auth_pages」に
      '#^.*$#'		=> 'nospam',
      何てのを追加して、「$auth_users」に
      'nospam'	=> '{x-php-md5}~~',
      何てのを追加する(http://host/hoge/wiki/?cmd=md5 で生成した物を設定(入力した文字列が、パスワードになる))
       
  2. コメントスパムも防止したい場合は、
    LIB_DIR にある、auth.php の
    // Check edit-permission
    function check_editable(
    ~
    		// Editable
    		return TRUE;
    // Check edit-permission
    function check_editable($page, $auth_flag = TRUE, $exit_flag = TRUE
    	// 【追記】凍結されていても編集可能だが、Basic認証はする という場合TRUEにする(コメント時とか)
    	, $temp_flag = FALSE
    )
    {
    	global $script, $_title_cannotedit, $_msg_unfreeze;
    
    	if (edit_auth($page, $auth_flag, $exit_flag) && ($temp_flag || is_editable($page))) {
    		// Editable
    		return TRUE;
    に置換。
    更に、
    	// 【追記】$edit_auth = 1 時、コメントすると認証を求める
    	check_editable($vars['refer'], true, true, true);
    を、
    PLUGIN_DIR にある、comment.inc.php、pcomment.inc.php、memo.inc.php の
    function plugin_~_action() ~
    の後あたりに追記する。

    ※PLUGIN_DIR にある、tracker.inc.php の場合のみ、
    	while (is_page($page))
    	{
    		$real = ++$num;
    		$page = "$base/$real";
    	}
    の直後に
    	// 【追記】$edit_auth = 1 時、コメントすると認証を求める
    	check_editable($page);
    を追記する。
    こんな感じになります → ./コメントスパム対策

認証に失敗した場合、認証が必要である理由などを表示する Edit

LIB_DIR / auth.php の

			header('HTTP/1.0 401 Unauthorized');
		}
		if ($exit_flag) {
			$body = $title = str_replace('$1',
				htmlspecialchars(strip_bracket($page)), $title_cannot);

の後に以下のような物を【追記】

			// 【追記】Basic認証に失敗していた場合、認証が必要である理由などを表示する
			$body .= mb_convert_encoding('<h2 style="color:red;background-color:#fdd">現在スパム対策のため編集に認証が必要です。IDは「nospam」、PWは「捕鯨」をローマ字(小文字)にしたものを入れてください。</h2><b>※リロードすれば認証をやり直せます</b>'
				. ($_POST['msg'] ? ' 以下投稿された内容<textarea style="width:100%;height:90%">'.htmlspecialchars($_POST['msg']).'</textarea>' : ''), 'EUC-JP', 'SJIS-win');

※UTF-8版の場合、代わりに以下のような物を【追記】

			// 【追記】Basic認証に失敗していた場合、認証が必要である理由などを表示する
			$body .= mb_convert_encoding(
				'<h2 style="color:red;background-color:#fdd">現在スパム対策のため編集に認証が必要です。名前は「nospam」、派巣は「捕鯨」をローマ字(小文字)にしたものを入れてください。</h2><b>※リロードすれば認証をやり直せます</b>'
				. ($_POST['msg'] ? ' 以下投稿された内容<textarea style="width:100%;height:90%">' : '')
			, 'UTF-8', 'SJIS-win')
			. ($_POST['msg'] ? htmlspecialchars($_POST['msg']) . '</textarea>' : '')
			;

更に、MenuBarにも認証が必要である理由などを載せておけばOK ※UTF-8の場合、国外PCでも日本語がデフォルトで化けないので、出来る限り日本語のみで記述する事をすすめます。(全角英数字は意味がない)

PukiWikiを複数使用する場合(plugin, lib, skin, image を共有する) Edit

ディレクトリに偽装 (mod_rewrite)する場合、必ずそちらを先に行ってください

  1. 「/pukiwiki-utf8-1.4.7/」を作成(出来れば、「public_html/」の親など、Webから参照出来ないところに作る)
    1. 「/public_html/hoge/wiki/」にある「plugin/」「lib/」を、このディレクトリに移動させる
      1. ディレクトリに偽装 (mod_rewrite)を導入している場合、「plugin/」を「plugin-modrewrite/」に、「lib/」を「lib-modrewrite/」にリネーム
    2. 「/public_html/hoge/wiki/skin/」のファイルを「/public_html/pukiwiki-skin/」に全て移動させ、前者のディレクトリを削除 ※SKINを共有しない場合は、何もしない
  2. 「/public_html/hoge/wiki/」にある不要ファイルを削除する(*gz, *.txt)
  3. 「/public_html/hoge/wiki/image/」のファイルを「/public_html/img/pukiwiki/」に全て移動させる
  4. 「/public_html/hoge/wiki/index.php」を編集する
    1. 「define('LIB_DIR', '../../../pukiwiki-utf8-1.4.7/lib/');」に書き換え
      ディレクトリに偽装 (mod_rewrite)を導入している場合、「define('LIB_DIR', '../../../pukiwiki-utf8-1.4.7/lib-modrewrite/');」に書き換え
  5. 「/public_html/hoge/wiki/pukiwiki.ini.php」を編集する
    1. 「define('PLUGIN_DIR', '../../../pukiwiki-utf8-1.4.7/plugin/' ); // Plugin directory」に書き換え
      ディレクトリに偽装 (mod_rewrite)を導入している場合、「define('PLUGIN_DIR', '../../../pukiwiki-utf8-1.4.7/plugin-modrewrite/' ); // Plugin directory」に書き換え
    2. 「define('SKIN_DIR', '../../pukiwiki-skin/');」に書き換え ※SKINを共有しない場合は、書き換えない
    3. 「define('IMAGE_DIR', '../../img/pukiwiki/');」に書き換え
      ディレクトリに偽装 (mod_rewrite)を導入している場合、「/pukiwiki-utf8-1.4.7/lib-modrewrite/init.php」を編集
  6. 「/public_html/hoge/wiki/」をどこか適当なところに保存しておく
  7. ディレクトリに偽装 (mod_rewrite)HTMLを軽くする為、内部リンクは相対パスにするを導入している場合、LIB_DIR / init.php の「define('IMAGE_DIR', $script . 'image/');」を「define('IMAGE_DIR', $xreassl.'/img/pukiwiki/');」に置換
    1. バックアップしたフォルダを「/public_html/computer/」など、適当なところにコピーしてする(これで plugin, lib などが使い回せる)

PLUGINなどの追加、改造 Edit

&ref() での画像表示を simpleapi.net に対応させる Edit

PLUGIN_DIR の ref.inc.php を弄る

define('PLUGIN_REF_IMAGE', '/\.(gif|png|jpe?g)$/i');

define('PLUGIN_REF_IMAGE', '/^http:\/\/img\.simpleapi\.net\/[^\/]+\/https?:\/\/|\.(?:gif|png|jpe?g|jpe)$/i');

に置換する

無理矢理304に対応させて軽量化を図る(CSSのみ) ※Apacheでのみ動作 Edit

SKIN_DIR の pukiwiki.css.php の

header('Content-Type: text/css');

の次の行に以下を【追記】

// {{{ 【追記/変更】更新されていない場合、キャッシュを使用させる
$tmp = filemtime('pukiwiki.css.php');
$req_header = apache_request_headers();
if (
	$req_header['If-Modified-Since'] === gmdate('D, d M Y H:i:s', $tmp) . ' GMT'  // RFC 822, updated by RFC 1123
	|| $req_header['If-Modified-Since'] === gmdate('l, d-M-y H:i:s', $tmp) . ' GMT'  // RFC 850, obsoleted by RFC 1036
	|| $req_header['If-Modified-Since'] === preg_replace('/ 0(\d) /', '  $1 ', gmdate('D M d H:i:s Y', $tmp))  // ANSI C's asctime() format (RFC 1945)
	// http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1
	// 崩れている書式にも対応させた方が良いかも知れないが、面倒なので放置
) {
	header('HTTP/1.1 304 Not Modified');
	exit;
}

header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $tmp) . ' GMT');

// キャッシュの有効期限を常に切れた状態にする = キャッシュがある場合、オフラインで無い限り必ずサーバーにアクセスする(キャッシュをさせない訳ではないので、304を返すことも可能) = ログに残せる&最新のページを見てもらいやすい
//header('Expires: Thu, 01 Jan 1970 00:00:00 GMT');
// }}}

無理矢理304に対応させて軽量化を図る(CSS以外) ※Apacheでのみ動作 Edit

※これは導入しない方がいいかもしれません

  1. ./pukiwiki.ini.php の $lastmod を 0 にする(自前で処理する為)
  2. SKIN_DIR の pukiwiki.skin.php の
    header('Cache-control: no-cache');
    header('Pragma: no-cache');
    をコメントアウト
  3. ./index.php, ./pukiwiki.php の「require(LIB_DIR . 'pukiwiki.php');」の前の行に以下を【追記】 ※若干編集が必要です
    // {{{ 【追記/変更】更新されていない場合、キャッシュを使用させる
    // 編集ページやPOST時はキャッシュさせず、他の通常ページはキャッシュさせる が、キャッシュの有効期限を常に切れた状態にする
    // = キャッシュがある場合、オフラインで無い限り必ずサーバーにアクセスする(キャッシュをさせない訳ではないので、304を返すことも可能) = ログに残せる&最新のページを見てもらいやすい
    // これにより、無駄な通信が減り、index.phpで直ぐに処理するのでサーバの負荷も減る
    // ※オンラインでも、他のページの更新がどれだけ前に行われたかというtitle属性値の (23m) 何てのや、最新のN件等が不正確になる
    //   ついでにカウンタも回りづらくなる
    // ※添付ファイルはこの追記では変化しない(通常通りの場合304無しでキャッシュさせる)
    // ※pukiwiki.ini.php の $lastmod を 0 にする事(自前で処理する為)
    if ($_POST || $_GET['plugin'] || ($_GET['cmd'] && $_GET['cmd'] !== 'read')) {  // 通常ページ以外の参照か、POSTの場合
    	if (!(
    	 $_GET['plugin'] === 'ref'
    	 || ($_GET['plugin'] === 'attach' && ($_GET['pcmd'] === 'open' || $_GET['openfile']))
    	 || ($_GET['plugin'] === 'input_helper_attach' && ($_GET['pcmd'] === 'open' || $_GET['openfile']))
    	)) {  // ファイル参照ではない場合
    		header('Cache-control: no-cache');
    		header('Pragma: no-cache');
    	}
    } else {  // 通常ページの参照
    	// ※pukiwiki.ini.php を読み込む前に処理する為、SKIN_DIR や DATA_DIR 、 $defaultpage 、 $menubar などが決め打ちになっています。変更している場合はそれに合わせて書き換えてください。
    	$pagename = ($_SERVER['QUERY_STRING'] ? $_SERVER['QUERY_STRING'] :
    		($_GET['page'] ? $_GET['page'] : 'FrontPage')  // ■$defaultpage
    		// $_GET['refer']
    	);
    	$tmp = array(
    		// 共通
    		filemtime('skin/pukiwiki.skin.php'),  // SKIN_DIR
    		filemtime('wiki/4D656E75426172.txt'),  // MenuBar  ■$menubar
    		filemtime('wiki/'.strtoupper(bin2hex(urldecode($pagename))).'.txt'),  // ページ名
    		filemtime('wiki/E382B3E383A1E383B3E38388'.strtoupper(bin2hex(urldecode($pagename))).'.txt'),  // コメント/ページ名  pcomment プラグイン用  pcommentの引数で別のページを参照している場合は駄目
    	);
    	// recent, popular プラグインを使っているページ(最新のN件、人気のN件があるページ)は、その特性上毎日00:00:00に更新しているということにする  ※MenuBarには使わないこと
    	// tracker_list プラグインを使っているページは、その特性上面倒なので、毎日00:00:00に更新しているということにする
    	if ($pagename === 'FrontPage')
    		$tmp[] = mktime(0,0,0,date('m'),date('d'),date('Y'));
    	/* DEBUG
    	echo '<xmp>';
    	print_r($tmp);
    	*/
    	rsort($tmp);
    	
    		// {{{ 更新されていない場合、キャッシュを使用させる
    		$req_header = apache_request_headers();
    		if (
    			$req_header['If-Modified-Since'] === gmdate('D, d M Y H:i:s', $tmp[0]) . ' GMT'  // RFC 822, updated by RFC 1123
    			|| $req_header['If-Modified-Since'] === gmdate('l, d-M-y H:i:s', $tmp[0]) . ' GMT'  // RFC 850, obsoleted by RFC 1036
    			|| $req_header['If-Modified-Since'] === preg_replace('/ 0(\d) /', '  $1 ', gmdate('D M d H:i:s Y', $tmp[0]))  // ANSI C's asctime() format (RFC 1945)
    			// http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1
    			// 崩れている書式にも対応させた方が良いかも知れないが、面倒なので放置
    		) {
    			header('HTTP/1.1 304 Not Modified');
    			exit;
    		}
    		
    		// }}}
    	
    	header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $tmp[0]) . ' GMT');
    	
    	// キャッシュの有効期限を常に切れた状態にする = キャッシュがある場合、オフラインで無い限り必ずサーバーにアクセスする(キャッシュをさせない訳ではないので、304を返すことも可能) = ログに残せる&最新のページを見てもらいやすい
    	header('Expires: Thu, 01 Jan 1970 00:00:00 GMT');
    	
    	unset($pagename, $tmp, $req_header);
    }
    // }}}

ファイル参照も無理矢理304に対応させる(ref, attach, input_helper_attache) ※Apacheでのみ動作 Edit

  1. PLUGIN_DIR の attach.inc.php と input_helper_attach.inc.php(input_helperプラグインを使用している場合のみ) の 「@readfile($this->filename);」の前に以下を追記
    		// {{{ 更新されていない場合、キャッシュを使用させる
    		$tmp = filemtime($this->filename);
    		$req_header = apache_request_headers();
    		if (
    			$req_header['If-Modified-Since'] === gmdate('D, d M Y H:i:s', $tmp) . ' GMT'  // RFC 822, updated by RFC 1123
    			|| $req_header['If-Modified-Since'] === gmdate('l, d-M-y H:i:s', $tmp) . ' GMT'  // RFC 850, obsoleted by RFC 1036
    			|| $req_header['If-Modified-Since'] === preg_replace('/ 0(\d) /', '  $1 ', gmdate('D M d H:i:s Y', $tmp))  // ANSI C's asctime() format (RFC 1945)
    			// http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1
    			// 崩れている書式にも対応させた方が良いかも知れないが、面倒なので放置
    			// If-Modified-Since: の最後に付く事がある「;length=\d+」は同URLのGETとPOSTのキャッシュがある場合にIE6がくっつける様子(\d+はそのキャッシュのサイズ)
    		) {
    			header('HTTP/1.1 304 Not Modified');
    			exit;
    		}
    		
    		header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $tmp) . ' GMT');
    		unset($tmp);
    		// }}}
  2. PLUGIN_DIR の ref.inc.php の 「@readfile($ref);」の前に以下を追記
    	// {{{ 更新されていない場合、キャッシュを使用させる
    	$tmp = filemtime($ref);
    	$req_header = apache_request_headers();
    	if (
    		$req_header['If-Modified-Since'] === gmdate('D, d M Y H:i:s', $tmp) . ' GMT'  // RFC 822, updated by RFC 1123
    		|| $req_header['If-Modified-Since'] === gmdate('l, d-M-y H:i:s', $tmp) . ' GMT'  // RFC 850, obsoleted by RFC 1036
    		|| $req_header['If-Modified-Since'] === preg_replace('/ 0(\d) /', '  $1 ', gmdate('D M d H:i:s Y', $tmp))  // ANSI C's asctime() format (RFC 1945)
    		// http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1
    		// 崩れている書式にも対応させた方が良いかも知れないが、面倒なので放置
    		// If-Modified-Since: の最後に付く事がある「;length=\d+」は同URLのGETとPOSTのキャッシュがある場合にIE6がくっつける様子(\d+はそのキャッシュのサイズ)
    	) {
    		header('HTTP/1.1 304 Not Modified');
    		exit;
    	}
    	
    	header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $tmp) . ' GMT');
    	unset($tmp);
    	// }}}

投票 Edit

vote.inc.php v1.23 改造版 +4.1 [2008/12/05更新] Edit

デフォルトの v1.23 を弄って、改造版を作った。 面倒なので別のプラグインとして公開する気はありません。 ディレクトリに偽装 (mod_rewrite)導入環境でのみ動作確認

導入

  1. swfobject.js を /js/ など、適当なディレクトリに保存
  2. UTF-8版の場合 filevote.inc.php.utf8 を、EUC-JP版の場合 filevote.inc.php.euc-jp を PLUGIN_DIR にDL、vote.inc.php にリネーム ※元々のvote.inc.phpのバックアップは取っておいてください
    1. ※「/js/swfobject.js」を swfobject.js を置いたパスに変更してください(絶対アドレス推奨 ※ディレクトリに偽装している場合は、必ず絶対アドレスにしてください)
  3. amChartsから amline, ampie をDL、適当なディレクトリに amline.swf, ampie.swf, export.php を置く
  4. Javaで作ったグラフ生成アプレットは非常に動作が怪しい&サイズが大きいので公開せず (^^;) (無くてもJavaAppletでのグラフ作成が出来なくなるだけで、他の機能は動きます)
  5. filevote.js を SKIN_DIR に DL
    1. ※「/swf/」を amline.swf, ampie.swf を置いたパスに変更してください(絶対アドレス推奨 ※ディレクトリに偽装している場合は、必ず絶対アドレスにしてください)

変更点(v1.23 +4.1)

  1. +1  JavaAppletでの円グラフ作成機能追加(適当)
  2. +2  PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACKが0の場合、
    #vote{{
    arg1,
    arg2, ...
    }}
    の様に書いても使えるようにした。(これにより、差分が見やすくなる)
  3. +3  Flashでの円グラフ、棒グラフ作成機能追加(amCharts使用 選択肢が9つ以上でcolumn、9つ以下の場合pie)
  4. +4  引数にコメントを使用可能にした(引数の頭に「#」でコメント扱い)
    &同一IPでの投票を制限出来るようにした(引数に「#all」が含まれる場合、日付が変わるまでの間、全選択肢に1回ずつ投票可能 引数に「#only」が含まれる場合、日付が変わるまでの間、1回だけどれか1つの項目に投票可能)
    &荒らし絞り込み用に投票ログを COUNTER_DIR/*.votelog_backup に保存 (0: しない, 1以上: する(そのサイズ上限Byte これを超えると一旦リセットされる)) 設定追加 ※引数に #only または #all が含まれている場合のみ有効
    &投票時タイムスタンプを維持Yes/No設定追加
  5. +4.1  バグ修正

サンプル1(日付が変わるまでの間、1回だけどれか1つの項目に投票可能  複数行)

選択肢 投票
項目1 4  
項目2 0  
項目3 0  
項目4 1  

サンプル2(日付が変わるまでの間、全選択肢に1回ずつ投票可能  1行)

選択肢 投票
ほげ 5  
もげ 5  
ほえほえ 3  

サンプル2(1行)

選択肢 投票
0 3  
1 0  
2 1  
3 0  
4 3  
5 0  
6 0  
7 1  
8 0  
9 1  

予定 (センタク - みんなの投票所に誘導した方がよっぽど楽という事実もあったりするので、殆どやる気無し)

  1. テーブルをソート可能にする -- 項目が多い場合便利
  2. パーセンテージTDを追加 -- 携帯用
  3. 0px ~ 100px の横棒でグラフ表示 (%) -- 携帯用?
  4. 投票推移を折れ線グラフで表示可能にする (amCharts使用) -- これは不正投票荒らしの判断にも使える
  5. それぞれの項目にコメントを付けられるようにする -- それぞれの項目にリンクを張るだけでも十分だけど…
  6. 設置ページが凍結されていても、新しい選択肢を増やせるようにする -- 荒らされやすくなるのが難点  また、直ぐ下にコメント欄を用意して、「追加希望選択肢があれば書き込んでください」と載せておくだけでもいいかもしれないが…

votex.inc.php Edit

未確認

グラフ作成 Edit

amcharts.inc.php Edit

amChartsで作る? いや、Google Chart API使った方が早いな…

charts.inc.php Edit

グラフ作成プラグイン - taru memo
PHP/SWF Charts使用 (FLASH)

jschart.inc.php Edit

PukiWiki/jschartプラグインでPukiWikiにグラフを表示 - アークウェブシステム開発SandBox
JSChart使用 (JavaScript)
円、線、折れ線グラフが表示可能

入力/編集補助 Edit

#instag#input-helper のどちらかのみでOK コメント欄専用にもうちょっと小型の物があってもいいかも

insTag Edit

非常に便利 スペースも1行分しか取らないのがイイ!

InputHelper Edit

非常に便利 スペースを大きく取ってしまうが、出来る事が多め
公式消滅

パラグラフ単位の編集を可能にする Edit

ParaEdit Edit

非常に便利 ページが長くなると、これ無しでは使えない程
公式消滅 転載

※./ をブラウザがキャッシュしていると壊れる様子

  1. PLUGIN_DIR の paraedit.inc.php の
    // 編集リンクの文字列・スタイルを指定
    //   %s に URL が入る
    の次の行を以下に【変更】
    define('_EDIT_LINK', ' <a class="paraedit" href="%s">Edit</a>');
    更に、「// 編集リンクの挿入箇所を指定」を「</h2>の前」にする
  2. SKIN_DIR の pukiwiki.css.php に【追記】
    /* paraedit */
    a.paraedit {
    <?php if ($media === 'print') { ?>
    	display: none;
    <?php } else { ?>
    	font-size: xx-small;
    	vertical-align: super;
    <?php } ?>
    }
  3. 後は配布ページに従う

ParaEditを#includeでも有効にする Edit

デフォルトの v1.21 をfileinclude.inc.phpに置き換えればOK!

ソースコード色分け表示 Edit

GeSHi Edit

未確認 対応数が多い コピーすると変な事になるのが困りもの (1.2)

highlighter.inc.php Edit

未確認

shjs.inc.php Edit

未確認 JavaScript

codehighlight.inc.php Edit

未確認

highlight.inc.php Edit

未確認 JavaScript

タグ管理 Edit

tag.inc.php Edit

高機能 タグのオールクリア (?cmd=tag) 、タグクラウド、一覧表示も可能。(?cmd=taglist&tag=wiki^hoge や ?cmd=taglist&tag=wiki-hoge などの AND, NOT も使用可能)
リネーム、ページ削除の前に &tag(); のみにしてタグをクリアする必要がある(オールクリアでもいいけど)。
タグ(引数)のリネームにはreplaceplugin.inc.phpを使用する(置換後、オールクリア)。

rev184 エラーが出る場合、tag.inc.php の 「_('Admin Password')」を「('Admin Password')」に置換

TagCloud、はてなのように「Design」クリックしたら、Designを含むページ一覧が表示されて、そこで「CSS」をクリックすると、「Design+CSS」扱いに出来ないかなぁ…

generate_tags Edit

未確認

counterlist Edit

revulo氏版 Edit

カウント一覧表示 最終閲覧日、アクセス数などでソート可能。
(このサイト非常に格好いい 他にも良さそうなプラグイン多数有り)

upk氏版 (開発、公開終了) Edit

カウント一覧表示 最終閲覧日、アクセス数などでソート可能。存在しないページのカウントファイル削除も出来る。
#dirを適用する場合、以下の改造が必要。 → 元ファイル上書きしてしまったので、勝手に改造版公開。filecounterlist.inc.php

deldel.inc.php Edit

http://www.okkez.net/pukiwiki/?memo%2F%E8%87%AA%E4%BD%9C%2F%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%2Fdeldel.inc.php
一括削除が楽になる ?cmd=deldel

数式表示 Edit

mimetex.inc.php Edit

mimetex.cgi を呼んで、TeX形式の数式を画像として表示する キャッシュ機能付き
例:x^2+y^2 = x^2+y^2

xreaでminetexをコンパイル&使用可能にする方法
公式にある linux版の mimetex.cgi を実行してもエラーが出るので、ソースをxreaにアップロードしてコンパイルする。

  1. SSHだと何故か失敗するので、Perl/CGIでコンパイルする
  2. ccは無いので、gccを使う

QRコード Edit

qrcode.inc.php Edit

みこ氏作 ※キャッシュ機能無し(ver.0.5)
よくあるフォーマット & 各携帯でどうなるか
hsus%27s%20Wiki%5Cr%5Cnhttp%3A%2F%2Fhsus.xrea.jp%2Fwiki%2F = &qrcode(2){hsus's Wiki\r\nhttp://hsus.xrea.jp/wiki/};

AsciiArt Edit

aapro.inc.php Edit

sue445氏版を元に改造したもの
アスキーアート表示プラグイン - 久々にワロタ まとめWiki

aa.inc.php Edit

sue445氏版

  1. PLUGIN_DIR に fileaa.inc.php をDL(拾い物転載 Ver1.01)
  2. SKIN_DIR / pukiwiki.css.php に以下を【追記】
    pre.aa
    {
    	font-family: MeiryoKe_PGothic, "MS Pゴシック", Mona;
    	color: black;
    	background-color: #efefef;
    	font-size: 12pt;
    	font-height: 18px;
    	line-height: 100%;
    }

折りたたみ Edit

region.inc.php Edit

JSが無効だと折りたたまれたままになるのが難点 また、閉じられなかった場合変な事になる
長いメニューをこれで一部隠し、第一引数に全メニューへのリンクを張れば良い感じ
他にもあると便利かも

#region([[省略>../]])
test
:a|aa
#endregion
+  省略

置換 Edit

replace.inc.php Edit

複数ページ一括置換

SKINなどの改造 Edit

  1. pukiwikiのcopyrightが誤解を与えそうなので、http://ja.poderosa.org/を真似、「Powered by」を PukiWiki x.x.x の前に付ける
  2. #navigator 内はpukiwiki皆同じ方が都合が良いので、弄らない

検索エンジンがゴミをクロールするのを止めさせる Edit

  1. SKIN_DIR / pukiwiki.skin.php の編集などのリンクに「 rel="nofollow"」を足す
  2. http://host/ にファイルをおける場合、robots.txt を作る(以下内容の例)
    User-Agent: *
    Disallow: /wiki/?cmd=
    Disallow: /wiki/?plugin=
    Disallow: /wiki/Help/
    Disallow: /wiki/PukiWiki/
    Allow: /wiki/?cmd=rss

デフォルトのSKINファイルには問題があるので、修正する Edit

  1. 「/public_html/pukiwiki-skin/pukiwiki.skin.php」
    1. s|skin/|<?php echo SKIN_DIR ?>|g

SKIN : float版 Edit

概要

導入

  1. #contentsを隠せるようにする(印刷用)&右上に目次/差分を固定表示」を適用する場合、filemenu.js を SKIN_DIR に置く
  2. SKIN_DIR / pukiwiki.skin.php
    1. #contentsを隠せるようにする(印刷用)&右上に目次/差分を固定表示」を適用する場合、
      </head>
      の前の行に以下を【追記】
      <script type="text/javascript" src="<?php echo $script . SKIN_DIR ?>menu.js" charset="utf-8"></script>
      または
      <script type="text/javascript" src="<?php echo $GLOBALS['xreassl'] ?>/pukiwiki-skin/menu.js" charset="utf-8"></script>
      <?php if (arg_check('read') && exist_plugin_convert('menu')) { ?>
      <table border="0" style="width:100%">
       <tr>
        <td class="menubar">
         <div id="menubar"><?php echo do_plugin_convert('menu') ?></div>
        </td>
        <td valign="top">
         <div id="body">~</div>
        </td>
       </tr>
      </table>
      <?php } else { ?>
      <div id="body">~</div>
      <?php } ?>
      を以下に【置換】
    2. 「<body>」の次の行に以下を【追記】
      <?php if (arg_check('read') && exist_plugin_convert('menu') && is_file(DATA_DIR . '4D656E75426172.txt')) { ?>
      	<div id="menubar"><?php echo do_plugin_convert('menu') ?></div>
      <?php } ?>
  3. SKIN_DIR の pukiwiki.css.php
    1. 「div#menubar」に以下を【追記】
      	float: right;
      	/* float: left 時のみ */
      	/* margin-right: 2.5ex; */
      	background-color: white;
      	padding: 1ex;
      	border: 1px solid black;
    2. 「div#navigator {」の「 clear:both;」を【削除】

SKIN : position:absolute(javascriptを切っている場合、no-cacheでないと駄目)版 (1.4.6) Edit

※古いです。全く動作確認していません。
javascriptが無効になっていてもPOSTとcookieで処理するが、no-cacheでないとちょっと困ったことになる

  1. copy menu.js SKIN_DIR
  2. SKIN_DIR の pukiwiki.skin.php
    1. -
      </head>
      の前の行に以下を【追記】
      <?php echo '<script type="text/javascript" src="' . SKIN_DIR . 'menu.js"></script>' ?>
      <style type="text/css">
      <?php if ($_COOKIE['hide'] == 1 || $_POST['hide'] == 1) { ?>
      	div#menubar{ position:static }
      <?php } elseif ($_COOKIE['hide'] == 2 || $_POST['hide'] == 2) { ?>
      	div#menubar{ display:none }
      <?php } ?>
      </style>
    2. 右上に常にcontentsを表示する
      最後の方に以下を【追記】
      <script type="text/javascript">create_contents_select()</script>
    3. -
      header('Content-Type: text/html; charset=' . CONTENT_CHARSET);
      の次の行に以下を【追記】
      if (strlen($_POST['hide'])) {
      	// POSTでCookieを変更
      	if ($_POST['keep'])
      		setcookie('hide', $_POST['hide']);
      	else
      		setcookie('hide');
      	// CookieよりPOST優先
      	$_COOKIE['hide'] = '';
      }
    4. -
      <?php if (arg_check('read') && exist_plugin_convert('menu')) { ?>
      <table border="0" style="width:100%">
       <tr>
        <td class="menubar">
         <div id="menubar"><?php echo do_plugin_convert('menu') ?></div>
        </td>
        <td valign="top">
         <div id="body">~</div>
        </td>
       </tr>
      </table>
      <?php } else { ?>
      <div id="body">~</div>
      <?php } ?>
      を以下に【置換】
    5. -
      <?php if ($attaches != '') { ?>
      <div id="attach">
      <?php echo $hr ?>
      <?php echo $attaches ?>
      </div>
      <?php } ?>
      の次の行に、以下を【追記】
      <?php if (arg_check('read') && exist_plugin_convert('menu') && is_file(DATA_DIR . '4D656E75426172.txt')) { ?>
      	<hr <?php if ($_COOKIE['hide'] != 1 && $_POST['hide'] != 1) echo 'style="display:none" '; ?>id="menu_hr" />
      	<div id="menubar"><?php echo do_plugin_convert('menu') ?></div>
      <?php } ?>
    6. -
      <body>
      を以下に【変更】
      <body
      <?php if (!$_COOKIE['hide'] && !$_POST['hide']
      	&& arg_check('read') && exist_plugin_convert('menu')
      	&& is_file(DATA_DIR . '4D656E75426172.txt')) { ?>
       style="margin-left:18ex"
      <?php } ?>
       onload="menu_body_onload()">
    7. -
       | <?php _navigator('help')   ?>
       ]
      の次に以下を【追記】
      <?php if (arg_check('read') && exist_plugin_convert('menu') && is_file(DATA_DIR . '4D656E75426172.txt')) { ?>
      <script type="text/javascript">menu_listbox_w()</script>
      <noscript><form method="post" style="display:inline;margin:0px;padding:0px">
      	<select name="hide">
      	<option value="0"<?php if (!$_COOKIE['hide'] && !$_POST['hide']) echo ' selected="selected"' ?>>Menuを左に</option>
      	<option value="1"<?php if ($_COOKIE['hide'] == 1 || $_POST['hide'] == 1) echo ' selected="selected"' ?>>Menuを下に</option>
      	<option value="2"<?php if ($_COOKIE['hide'] == 2 || $_POST['hide'] == 2) echo ' selected="selected"' ?>>Menuを隠す</option>
      	</select><input name="keep" title="維持(一時cookie使用)" type="checkbox"<?php if ($_POST['keep'] || strlen($_COOKIE['hide'])) echo ' checked="checked"' ?>><input type="submit" value="変更"></form> <a href="#menubar" title="MenuBar">#</a>
      </noscript>
      <?php } ?>
    8. ※./pukiwiki.ini.php の $menubar を MenuBar 以外の物にしている場合、4D656E75426172 の部分もそれに合わせた物に変更する
  3. SKIN_DIR の pukiwiki.css.php
    1. 「hr.full_hr」を「hr.full_hr, hr#menu_hr」に【変更】
    2. MenuBarを左上に
      div#menubar {
      <?php   if ($media == 'print') { ?>
      	display:none;
      <?php   } else { ?>
      の次の
      	width:9em;
      を以下に【置換】
      	width:18ex;
      	position:absolute;
      	left:0px;
      	top:0px;
      	display:block;

外部リンクにショートカット(*.lnk)のアイコンみたいなのを表示 Edit

HTMLに直接IMGタグを埋め込むやり方 Edit

CSSで表示させるやり方 Edit

IMAGE_DIR に ext.png をDL

LIB_DIR の make_link.php の

			$rel = '';
		} else {
			$rel = ' rel="nofollow"';

			//$rel = '';
			$rel = ' class="ext"';
		} else {
			//$rel = ' rel="nofollow"';
			$rel = ' rel="nofollow" class="ext"';

に変更して、
InterWikiのも外したい場合は、同じファイルの「class Link_interwikiname extends Link {~}」内の最後らへんにある「 rel="nofollow"」も「 rel="nofollow" class="ext"」に置換する。
次に、SKIN_DIR の pukiwiki.css.php に

<?php	if ($media !== 'print') { ?>
a.ext {
	padding-left: 14px;
	background-image: url(/img/pukiwiki/ext.png);
	background-repeat: no-repeat;
	background-position: left bottom;
}
<?php } ?>
a.ext:hover, a.ext:focus, a.ext:active {
	color: red;
	background-color: #ffdddd;
}

みたいなのを追記


ついでに、LIB_DIR の init.php の

	' <a href="http://pukiwiki.sourceforge.jp/">PukiWiki Developers Team</a>.' .
	' License is <a href="http://www.gnu.org/licenses/gpl.html">GPL</a>.<br />' .
	' Based on "PukiWiki" 1.3 by <a href="http://factage.com/yu-ji/">yu-ji</a>'

にも「 class="ext"」を入れたければ入れる


※Xreaの場合、SKIN_DIR の pukiwiki.css.php の

header('Content-Type: text/css');

の後に、以下を挿入

// Xrea の SSL 用
if (preg_match('/(ss\d*\.xrea\.com)/i', $_SERVER['HTTP_VIA'], $matches))
	$xreassl = 'https://'.$matches[1].'/'.$_SERVER['HTTP_HOST'];

更に、「/img/pukiwiki/」を「<?php echo $xreassl ?>/img/pukiwiki/」に置換

※「/img/pukiwiki/」は適当なパスに置換してください(SKINファイルでは、IMAGE_DIRが参照出来ない)

JavaScriptで埋め込むやり方 Edit

#contentsを隠せるようにする(印刷用)&右上に目次/差分を固定表示 [2008/12/05更新] Edit

ついでに、<H\d> クリックでも目次表示
※#include の対応は極めていい加減

  1. filemenu.js を SKIN_DIR にDL
  2. LIB_DIR の convert_html.php の
    	function replace_contents($arr)
    	{
    		$contents  = '<div class="contents">' . "\n" .
    				'<a id="contents_' . $this->id . '"></a>' . "\n" .
    を以下に【置換】
    	function replace_contents($arr)
    	{
    		$contents  = '<script type="text/javascript">contents_show_hide(' .$this->id. ')</script><div id="contents_' .$this->id. '" class="contents">' ."\n" .
    		//		'<a id="contents_' . $this->id . '"></a>' . "\n" .
  3. SKIN_DIR の pukiwiki.css.php に以下を【追記】
    /* menu.js */
    <?php if ($media === 'print') { ?>
    div#content_select_div, span.contents_show_hide {
    	display: none;
    }
    <?php } ?>

タイムスタンプを変更しない場合、管理パスが必要であるということを表示&編集時はページが壊れる可能性があるので、Proxomitron等をバイパスしてくれと表示する Edit

  1. LIB_DIR / html.php の
    			$_btn_notchangetimestamp . '</span></label>' . "\n" .
    			$_btn_notchangetimestamp . ($notimeupdate == 2 ? '&#xff08;&#8251;&#x7ba1;&#x7406;&#x30d1;&#x30b9;&#x304c;&#x5fc5;&#x8981;&#x3067;&#x3059;&#xff09;' : '') . '</span></label>' . "\n" .
    に【置換】 (『タイムスタンプを変更しない』の後に『(※管理パスが必要です)』を追加する)
  2. 同じファイルの
      <div style="float:left;">
    <strong style="color:#f55">&#x3010;&#x91cd;&#x8981;&#x3011; &#x7de8;&#x96c6;&#x6642;&#x306f;&#x30da;&#x30fc;&#x30b8;&#x304c;&#x58ca;&#x308c;&#x308b;&#x53ef;&#x80fd;&#x6027;&#x304c;&#x3042;&#x308b;&#x306e;&#x3067;&#x3001;Proxomitron&#x7b49;&#x3092;&#x4f7f;&#x7528;&#x3057;&#x3066;&#x3044;&#x308b;&#x5834;&#x5408;&#x306f;<u>&#x5fc5;&#x305a;&#x30d0;&#x30a4;&#x30d1;&#x30b9;&#x3057;&#x3066;&#x304f;&#x3060;&#x3055;&#x3044;</u>&#x3002;</strong>
      <div style="float:left;">
    に【置換】 (TEXTAREAの直ぐ下に『【重要】 編集時はページが壊れる可能性があるので、Proxomitron等を使用している場合は必ずバイパスしてください』を追加する)

編集時、TEXTAREAを横幅100%にする Edit

  1. LIB_DIR / html.php の
      <textarea name="msg" rows="$rows" cols="$cols">$s_postdata</textarea>
      <br />
      <textarea name="msg" rows="$rows" cols="$cols" style="width:100%;line-break:normal;word-break:break-all;word-wrap:break-word;white-space:-moz-pre-wrap;white-space:-pre-wrap">$s_postdata</textarea>
      <br style="display:none" />
    に【置換】 (普通は textarea を width:100% にするだけでいい筈だが、#instag を導入している場合(?)、強制折り返しにしないと横に伸びすぎてしまう事がある様子※IE7で確認)
  2. #instag を導入している場合、SKIN_DIR / jscripts/instag/themes/pukiwiki/css/editor_ui.css の 「.mceEditor {~}」に「width:100%;」を追加する必要がある
  3. #input-helper を導入している場合、忘れた

ユーザ定義ルールの追加/変更 Edit

  1. 微妙な荒らし対策 ;で区切れないように変更 (expression() は元から無効)
  2. font-family を指定可能に

./default.ini.php の
 // ユーザ定義ルール(コンバート時に置換)
以下を次のように変更

// ユーザ定義ルール(コンバート時に置換)
$line_rules = array(
	//'COLOR\(([^\(\)]*)\){([^}]*)}'	=> '<span style="color:$1">$2</span>',
	'COLOR\(([^;\(\)]*)\){([^}]*)}'	=> '<span style="color:$1">$2</span>',
	//'SIZE\(([^\(\)]*)\){([^}]*)}'	=> '<span style="font-size:$1px">$2</span>',
	'SIZE\((\d{1,2})\){([^}]*)}'	=> '<span style="font-size:$1px">$2</span>',
	//'COLOR\(([^\(\)]*)\):((?:(?!COLOR\([^\)]+\)\:).)*)'	=> '<span style="color:$1">$2</span>',
	'COLOR\(([^;\(\)]*)\):((?:(?!COLOR\([^\)]+\)\:).)*)'	=> '<span style="color:$1">$2</span>',
	//'SIZE\(([^\(\)]*)\):((?:(?!SIZE\([^\)]+\)\:).)*)'	=> '<span class="size$1">$2</span>',
	'SIZE\(([0-7])\):((?:(?!SIZE\([^\)]+\)\:).)*)'	=> '<span class="size$1">$2</span>',
	'%%%(?!%)((?:(?!%%%).)*)%%%'	=> '<ins>$1</ins>',
	'%%(?!%)((?:(?!%%).)*)%%'	=> '<del>$1</del>',
	"'''(?!')((?:(?!''').)*)'''"	=> '<em>$1</em>',
	"''(?!')((?:(?!'').)*)''"	=> '<strong>$1</strong>',
	
	// 【追記】FACE/FONTでフォント変更
	'F(?:ACE|ONT)\(([^;\(\)]*)\){([^}]*)}'	=> '<span style="font-family:$1">$2</span>',
	'F(?:ACE|ONT)\(([^;\(\)]*)\):((?:(?!F(?:ACE|ONT)\([^\)]+\)\:).)*)'	=> '<span style="font-family:$1">$2</span>',
	
	// 【追記】
	"~~(?!~)((?:(?!~~).)*)~~"	=> '<sup>$1</sup>',
	"__(?!_)((?:(?!__).)*)__"	=> '<sub>$1</sub>',
);

以下微妙な荒らしの例

  1. COLOR(#eeeeff;font-size:660px;font-family:"MS Pゴシック",Mona;position:absolute;top:0px;left:0px;z-index:100;width:100%;height:100%){t}
  2. SIZE(660;color:#eeeeff;font-family:"MS Pゴシック",Mona;position:absolute;top:0px;left:0px;z-index:100;width:100%;height:100%){e}
  3. SIZE(2000){■}
  4. COLOR(#eeeeff;font-size:660px;font-family:"MS Pゴシック",Mona;position:absolute;top:0px;left:0px;z-index:100;width:100%;height:100%):s
  5. SIZE(6" style="color:#eeeeff;font-family:"MS Pゴシック",Mona;position:absolute;top:0px;left:0px;z-index:100;width:100%;height:100%):t

以下例

RSSを一応見れる物にする Edit

  1. http://www.w3.org/2000/08/w3c-synd/style.css を rdf.css にリネームして SKIN_DIR に置く
  2. PLUGIN_DIR の rss.inc.php の
    <?xml version="1.0" encoding="utf-8"?>
    が含まれる行を
    	print '<?xml version="1.0" encoding="UTF-8"?>' . "\n" . '<?xml-stylesheet href="' . SKIN_DIR .'rdf.css" type="text/css"?>' . "\n\n";
    に変更  ※Xreaの場合、以下のようにする ※HTMLを軽くする為、内部リンクは相対パスにするを適用していること
    	print '<?xml version="1.0" encoding="UTF-8"?>' . "\n" . '<?xml-stylesheet href="'.$GLOBALS['xreassl'].'/pukiwiki-skin/rdf.css" type="text/css"?>' . "\n\n";

FeedBurnerを利用する Edit

負荷も軽くなるし、非常に便利なサイトで、しかも無料なので、使用しない手はありません。 オススメ!
(SKIN_DIR / pukiwiki.skin.php の 「<?php echo $link['rss'] ?>」を専用URLに変更するのを忘れずに)

AddClipsを利用する Edit

ウェブブックマークへの登録が非常に簡単になるのでおすすめ。
MenuBar の最後らへんに「<div style="text-align:right">~</div>」で囲んで、ぶち込んでおくといい感じ。

消されない広告挿入 Edit

MenuBarなどに amazon 等のプラグインで挿入してから、凍結すればOKと言えばOKだが… 自由にHTMLを書けない(書けるようになるプラグインもあるかと思うけど)ので、SKINにべた書きする。

直接SKINにHTML記述 Edit

SKIN_DIR / pukiwiki.skin.php の 「<?php echo do_plugin_convert('menu') ?>」の後辺りに(MenuBarの最後らへん)以下を【追記】

<hr class="full_hr" />
<h4 style="border:0px; background-color:#eee">以下宣伝
<script type="text/javascript">
_d.write(' [<a href="javascript:void(0)" onclick="'
	+ "var sty = _d.getElementById('menu_ads').style;"
	+ "if (sty.display === 'none') {"
		+ "this.innerHTML = '隠す';"
		+ "sty.display = '';"
		+ "_d.cookie = 'hide_ads=1; path=<?php echo $script; ?>; expires=Fri, 5-Oct-1979 08:10:00 GMT';"
	+ "} else {"
		+ "this.innerHTML = '表示';"
		+ "sty.display = 'none';"
		+ "_d.cookie = 'hide_ads=1; path=<?php echo $script; ?>';"
	+ "}"
+ '">' +(/(?:^|;\s*)hide_ads=1/.test(_d.cookie) ? '表示' : '隠す')+ '</a>]');
</script>
</h4>
<div id="menu_ads">
このサイトと微塵も関係なくてもいいじゃない。
<div style="text-align:center">
<a href="http://www8.atwiki.jp/mainichi-matome/" style="text-decoration:none">
<img src="/img/link/mainichi-hentai-28_120x90.png" style="width:120px; height:90px; border:1px solid blue" title="変態毎日新聞問題の情報集積wiki" alt="変態毎日新聞問題の情報集積wiki" /><br />
<img src="/img/link/mainichi-hentai-31_130x150.gif" style="width:130px; height:150px; border:1px solid black; margin-top:1ex" title="こどもたちや女性の安全の為に知ってください" alt="こどもたちや女性の安全の為に知ってください" /></a>
</div>
<script type="text/javascript">
if (/(?:^|;\s*)hide_ads=1/.test(_d.cookie))
	_d.getElementById('menu_ads').style.display = 'none';
</script>
</div>

一応、一時Cookieを使用して広告表示/非表示切り替え可能 ※prototype.js や filemenu.js を使用していない場合は、_d = document; を適当なところに書く必要があります。
※多バイト文字を使用する場合は、pukiwiki.skin.php の文字コードをUTF-8か、EUC-JPに変える必要があります

@外部JavaScriptとして読み込んだ方がいいかも知れないが、そうするとJavaScriptOFF環境で見えなくなってしまうのでやめ
@外部ファイルを readfile() で読み込んだ方がいいかも知れないが、そうすると重くなるかも知れないので(適当)やめ

掲示板の名前のリンクを Name>:User/Name にする Edit

PLUGIN_DIR / comment.inc.php の 「PLUGIN_COMMENT_FORMAT_NAME」の値と、
PLUGIN_DIR / pcomment.inc.php の 「PLUGIN_PCOMMENT_FORMAT_NAME」の値を以下に置換

'[[$name>:User/$name]]'

拡張機能のHELPを用意する Edit

PukiWiki/1.4/Manual/Plugin/追加拡張 辺りに #mimetex などのHELPを用意

InterWikiName 編集 Edit

追加

-[http://find.2ch.net/?BBS=ALL&TYPE=TITLE&COUNT=100&STR= 2ch] euc

外部リンクに付けられる「 rel="nofollow"」を消す Edit

※SPAM対策がしっかり出来ていない場合、推奨出来ません

LIB_DIR / make_link.php の
「class Link_url extends Link {~}」内の最後らへんにある「 rel="nofollow"」を削除すればOK!

InterWikiのも外したい場合は、同じファイルの「class Link_interwikiname extends Link {~}」内の最後らへんにある「 rel="nofollow"」を削除すればOK!


添付ファイル: filevote.inc.php.euc-jp 2件 [詳細] filevote.inc.php.utf8 7件 [詳細] filevote.js 4件 [詳細] filemenu.js 4件 [詳細] fileaa.inc.php 4件 [詳細] filecounterlist.inc.php 3件 [詳細] fileinclude.inc.php 3件 [詳細] fileext.png 7件 [詳細]

  複製 名前変更
QRコード(トップページのアドレス)