ページ更新: 2006-06-18 (日) (4077日前)

サーバ管理やPukiwiki修正の記録。

[編集]

2005-12-21 #

[編集]

[PukiWiki] ページのキャッシュ #

0hitぷき - キャッシュ実装 http://puki.0hit.net/index.php/convert_html_from_cache を試してみる。

(なお、最新版は http://puki.0hit.net/index.php/Convert_Cache だが、まだ試していない (2006-09-07))

PukiWiki 1.4.4を使用(ようするにこのサイト。)

  • v0.4aは試していない (2005-12-28)
  • ls2_1.inc.php の作用は確認していない。(とりあえず、#ls2_1があるページはnocacheにしてみた)

0hitぷき - キャッシュ実装より、次のファイルを入手。

  • cache.php-v0.3fix (2005-12-22 cache.php-v0.3fix2に入れ替え)
  • cache_extra.3.zip

cache.php-v0.3fixはcache.phpにファイル名を変更、漢字コード・改行コードを確認後、lib/に転送。

cache_extra.3.zipも中身を確認、サーバに転送して展開し、delhtmlcache.inc.php, nocache.inc.php は plugin/へ。

cache_htmlディレクトリを作成。パーミッションはPukiWikiのcacheディレクトリと同じにする。

cache.diffを使って、index.php, lib/file.php, lib/pukiwiki.php にパッチを当てる。 (んが、さほどパッチ個所がないので、手パッチした)

動作をしばし確認したのち、lib/cache.phpでデバッグ出力を停止する。

新しいバージョン http://puki.0hit.net/index.php/Convert_Cache が出ているが、まだ試してない。

[編集]

2005-12-17 #

[編集]

[PukiWiki] ページがないときの画面に、検索のリンクを追加 #

ページがないときはページの編集画面ではなく404とエラーメッセージを出力の画面に検索のリンクを追加した。

ja.lngに'$3'を追加、plugin/read.inc.phpに$3を"?cmd=search"に置き換える処理を追加した。

ja.lng

$_msg_notfound = '指定されたページは見つかりませんでした。<br /><a href="$1">編集</a>するか、<a href="$2">親ディレクトリ</a>にアクセスするか、あるいか<a href="$3">検索</a>してみて下さい。';

plugin/read.inc.php

      } else if (is_pagename($page)) {
               header('HTTP/1.0 404 Not Found');
               return array(
                       'msg'=>'NOT FOUND',
                       'body'=>str_replace('$1', "?cmd=edit&amp;page=$page",
                       str_replace('$2', preg_replace('/\/[^\/]+$/','','?'.$page),
                       str_replace('$3', "?cmd=search",
                       $_msg_notfound)))
               );
[編集]

2005-11-06 #

[編集]

[PukiWiki] Web Site Iconの<link rel>を追加 #

いまさらだけど。

skin/pukiwiki.skin.ja.php

** pukiwiki.skin.ja.php~       Tue Aug 23 23:08:00 2005
--- pukiwiki.skin.ja.php        Sun Nov  6 00:57:42 2005
***************
*** 31,36 ****
--- 31,37 ----
   <title><?php echo "$title - $page_title" ?></title>
   <link rel="stylesheet" href="skin/default.ja.css" type="text/css" media="screen" charset="Shift_JIS" />
   <link rel="stylesheet" href="skin/print.ja.css" type="text/css" media="print" charset="Shift_JIS" />
+  <link rel="shortcut icon" href="/favicon.ico" />
  <?php
    global $trackback, $referer;
    if ($trackback) {
[編集]

2005-10-27 #

[編集]

[PukiWiki] 内部・外部リンクを区別して表示 (PukiWikiのリンク生成部分で処理) #

自作プラグイン-exlink.inc.php - PukiWiki-officialの使用をいったん中止し(といってもMenuBarに書いてたプラグイン呼び出しをコメントアウトしただけ)、 PukiWiki-改造-内部・外部リンクを区別する - cubic9.comを使ってみることにした。

次の理由から、画像を使わずに、これまでと同じようにリンクの直後に ⇒を表示する。

  1. IE6がリンク上にマウスカーソルを移動する度に画像をアクセスしに行く。キャッシュの設定がまずい? Firefox 1.0.7では問題なし。
  2. いまのところ、discypus.jpはロゴ以外の画像は排除している。

skin/default.ja.css: 今回使わないが、そのうちCSS側でなにかやるかもしれないので、定義だけしておく。

/* ext_link.diff */
a.external {
}

default.ini.php: 次の行を追加 (メモ: 当初、&rArr; の';'を忘れてたのだけど、Firefox 1.0.7では表示されるので間違ってるのに気がつかなかった)

/////////////////////////////////////////////////
// 外部リンクを示す文字列
$ext_link_marker = '&rArr;';

lib/make_link.php: ext_link.diff(PukiWiki1.4.4専用)のパッチを適用後したあと、'class=external'を指定してる部分3個所で$ext_link_markerを挿入。

$ diff -u make_link.php.org make_link.php
--- make_link.php.org   2005-10-27 22:57:29.000000000 +0900
+++ make_link.php       2005-10-27 23:59:15.000000000 +0900
@@ -335,7 +335,13 @@
        }
        function toString()
        {
-               return "<a href=\"{$this->name}\">{$this->alias}</a>";
+               global $my_site, $ext_link_marker;
+
+               if (strpos($this->name, $my_site)) {
+                       return "<a href=\"{$this->name}\">{$this->alias}</a>";
+               } else {
+                       return "<a href=\"{$this->name}\" class=\"external\">{$this->alias}{$ext_link_marker}</a>";
+               }
        }
 }
 // url (InterWiki definition type)
@@ -368,7 +374,8 @@
        }
        function toString()
        {
-               return "<a href=\"{$this->name}\">{$this->alias}</a>";
+               global $ext_link_marker;
+               return "<a href=\"{$this->name}\" class=\"external\">{$this->alias}{$ext_link_marker}</a>";
        }
 }
 //mailto:
@@ -468,7 +475,8 @@
        }
        function toString()
        {
-               return "<a href=\"{$this->url}{$this->anchor}\" title=\"{$this->name}\">{$this->alias}</a>";
+               global $ext_link_marker;
+               return "<a href=\"{$this->url}{$this->anchor}\" title=\"{$this->name}\" class=\"external\">{$this->alias}{$ext_link_marker}</a>";
        }
 }
 // BracketName
[編集]

2005-10-11 #

[編集]

[Linux] Apache mod_gzip使用中止 #

  • 職場のProxy経由経由でアクセスしたら、遅く感じたので、とりあえず使用を中止。
  • Transfer-Encoding: chunkedを使えなくなるのも、遅く思える原因の1つかも。
  • あるいは、Proxy側でgzipを途中で展開して調べてるのかも。
    • もし、これが原因であれば、Proxy経由かどうかでmod_gzipの使用を切り替えればよいかと思う。
[編集]

2005-10-10 #

[編集]

[Linux] Apacheにmod_gzipを設定 #

Port80 Software- Tools
http://www.port80software.com/support/p80tools

[編集]

2005-09-23 #

[編集]

[Debian] sqlite2, sqlite3, php4-sqlite, python2.3-sqlite #

次のパッケージをインストールした

  • sqlite (2.8.16-1)
  • libsqlite0 (2.8.16-1)
  • php4-sqlite (1.0.2-7)
  • python2.3-sqlite (1.0.1-2)
  • sqlite3 (3.2.1-1)
  • libsqlite3-0 (3.2.1-1)

ソフト/Script言語/Python ソフト/Script言語/PHP

[編集]

[Debian] apt-listchangesでエラー(unknown encoding: EUC-JP) #

Sargeにしてから、apt-listchangesが次のエラーを吐く。

Traceback (most recent call last):
  File "/usr/bin/apt-listchanges", line 35, in ?
    import apt_listchanges
  File "/usr/lib/site-python/apt_listchanges.py", line 26, in ?
    _ = gettext.translation('apt-listchanges').gettext
  File "/usr/lib/python2.3/gettext.py", line 416, in translation
    t = _translations.setdefault(key, class_(open(mofile, 'rb')))
  File "/usr/lib/python2.3/gettext.py", line 176, in __init__
    self._parse(fp)
  File "/usr/lib/python2.3/gettext.py", line 304, in _parse
    tmsg = unicode(tmsg, self._charset)
LookupError: unknown encoding: EUC-JP

rootはLANG=Cにしてあるのだが、どこの設定を見てるのだろうか。

今後Pythonも使おうと思っているので、Japanese Codecsを入れて解消することにした。

# apt-cache search python | grep -i japan
python-japanese-codecs - Japanese Codecs for Python
python2.2-japanese-codecs - Japanese Codecs for Python
python2.3-japanese-codecs - Japanese Codecs for Python

# apt-get install python2.3-japanese-codecs
[編集]

[Linux] quota変更 #

  • wwwのquotaを2GB, homeを0.5GBに増量。
  • homeのパーティションはもっと多い方が良かったなあ。
# edquota defaultuser     ★テンプレートになるユーザの設定を修正
# edquota -p defaultuser targetuser1 targetuser2    ★実際にユーザに設定を複写
[編集]

2005-08-17 #

08/17〜19にdiscypus.jpのサーバのメンテナンスを行います。(07/30に時間がなくてできなかったことをいくつか)

  1. OS(Linux)をすべてRAID1に移動
    今回はAcronis True Image 8.0Partition Imageを使う。 ただし、パーティションを1つ減らす (/var/log はルートパーティションに)ので、こいつはcp -aで。
    →8/17 13:45 RAID1への移動を完了。
  2. Debian GNU/Linuxのアップデート
    Debian GNU/Linuxを 3.0→3.1に。kernelは2.4.*で。アップデート 30分、設定1.5時間くらい。 (ssh, postfix, apache, phpさえまともに動けば、あとで調整できるし…)
    →8/17 19:45 Debian GNU/Linux をWoody→Sarge にアップデート, UPS制御ソフトの設定と動作確認を完了。
  3. UPS制御ソフトの設定と動作確認
    genpowerの設定と動作確認。設定ファイルの書き換えのみで動くなら1時間、 genpowerの再コンパイル(カスタムdebパッケージの作成)が生じても2.0時間くらい。 (genpowerのエントリ、カスタムパッケージの作成手順は確認済み)
    →8/17 19:45 Debian GNU/Linux をWoody→Sarge にアップデート, UPS制御ソフトの設定と動作確認を完了。
  4. 旧ハードディスクを外す
    3.の作業が終了した時点で、これまで使っていたHDD (SCSI 2台)を取り外して梱包する。
    →8/17 19:45 完了。
  5. その他
    1. kernel 2.4と2.6を切り替えられるように設定 (デフォルトは2.4で)
      →8/17 19:45 kernel 2.6を入れたが、動作確認はなし。完了。(ATA100/133 I/Fを入れたときにやる)
    2. Accusysの付属ソフト (rpm) を無理矢理(alignでdebに変換)して入れてみようかと
      →8/17 19:45 ドキュメント読んでもよくわからん。mail.cfgを設定してrs232を起動して、9999ポートに接続するとなんか帰ってくるのだが。中止。

サーバ停止中にトラブルがあったときは http://discypus.cocolog-nifty.com/ で告知します。

[編集]

[Hardware] ドライブの交換 #

  • SCSI HDD (2台)の既存のファイルをすべてPC/Accusys ACS-75130にコピーし、 Linuxを起動できるようにする。
  • SCSI機器を全部外す。
[編集]

[Debian] Debian GNU/Linux 3.0(Woody)→3.1(Sarge)への移行 #

  • Linux/debian/WoodyからSargeにアップグレード?
[編集]

[Hardware] genpowerの設定 #

  • PC/UPS#Nipron_eNSP-300P-S20-11Sに対してgenpowerの設定を行い、Linuxからの停電検出、自動シャットダウン制御、バッテリ電圧低下時の自動シャットダウン、自動復帰動作を確認する。
[編集]

2005-07-31 #

[編集]

[Hardware] RAID1を追加 #

  • PC/Accusys ACS-75130を取り付け。
  • 既存のハードディスクはそのまま残しておき、次回メンテナンスまでは動作確認 (大量のファイルコピーなど)を行う。
[編集]

[Hardware] NonStop電源に交換 #

  • 電源をPC/UPS#Nipron_eNSP-300P-S20-11Sに交換。
  • genpowerはインストールするが、設定は行わない。ただし、gentestで信号の確認は行う。
[編集]

2005-07-03 #

[編集]

[PukiWiki] 「管理者だけが添付ファイルをアップロードできるようにする」でアップロードできなくなったようなので修正 #

添付ファイルをアップロードするとき、正しいパスワードを入れても「管理者パスワードが一致しません」が出る。 たぶん「管理者だけが添付ファイルをアップロードできるようにする」設定の影響だと思う。

編集の認証を行っていないページだと添付できる。

Linux day after day(2005-06-25) attachref.inc.php を見て、 attach, attachrefを次のように修正して、解消した。

plugin/attach.inc.php

$ diff -u attach.inc.php~ attach.inc.php
--- attach.inc.php~     Thu May 19 22:27:38 2005
+++ attach.inc.php      Sun Jul  3 23:21:43 2005
@@ -547,7 +547,7 @@
                        if (ATTACH_DELETE_ADMIN_ONLY || $this->age) {
                                return attach_info('err_adminpass');
                        } else if (ATTACH_PASSWORD_REQUIRE &&
-                               md5($pass) != $this->status['pass']) {
+                               $pass != $this->status['pass']) {
                                return attach_info('err_password');
                        }
                }

plugin/attachref.inc.php

$ diff -u attachref.inc.php~ attachref.inc.php
--- attachref.inc.php~   Mon May 30 10:22:48 2005
+++ attachref.inc.php   Sun Jul  3 23:24:14 2005
@@ -176,7 +176,7 @@
                {
                        return array('msg'=>'attach.inc.php not found or not correct version.');
                }
-               $pass = array_key_exists('pass',$vars) ? md5($vars['pass']) : NULL;
+               $pass = array_key_exists('pass',$vars) ? $vars['pass'] : NULL;
            $retval = attach_upload($file,$vars['refer'],$pass);
                if ($retval['result'] == TRUE)
                {

いじったあとで 質問箱3/99  を 見つけた。

[編集]

2005-06-10 #

[編集]

[PukiWiki] ページ新規作成時のページ名入力欄の桁数を変更する #

ページ名入力欄の桁数が固定なので、defauit.ini.phpに設定項目を追加し、それを使うように修正する。

ページ新規作成時の入力欄のHTML:

ページ新規作成:
  <input name="page" size="30" value="" type="text">

defauit.ini.phpに設定項目がなかったので、phpファイル内を検索:

$ find . -type f -name "*.php" | xargs egrep 'size="30"'
./plugin/amazon.inc.php:  <input type="text" name="asin" size="30" value="" />
./plugin/lookup.inc.php:  <input type="text" name="page" size="30" value="$default
" />
./plugin/newpage.inc.php:  <input type="text" name="page" size="30" value="$s_newp
age" />

default.ini.phpへ設定項目を追加:

/////////////////////////////////////////////////
// ページ新規作成時のテキストエリアの行数
$newpage_cols = 60;

plugin/newpage.inc.phpを修正:

$ diff -u newpage.inc.php~ newpage.inc.php
--- newpage.inc.php~    Tue Jun  7 23:26:30 2005
+++ newpage.inc.php     Fri Jun 10 01:08:46 2005
@@ -3,7 +3,7 @@

 function plugin_newpage_convert()
 {
-       global $script,$vars,$_btn_edit,$_msg_newpage,$BracketName;
+       global $script,$vars,$_btn_edit,$_msg_newpage,$BracketName,$newpage_cols;

        $newpage = '';
        if (func_num_args()) {
@@ -20,7 +20,7 @@
   <input type="hidden" name="plugin" value="newpage" />
   <input type="hidden" name="refer" value="$s_page" />
   $_msg_newpage:
-  <input type="text" name="page" size="30" value="$s_newpage" />
+  <input type="text" name="page" size="$newpage_cols" value="$s_newpage" />
   <input type="submit" value="$_btn_edit" />
  </div>
 </form>
[編集]

2005-06-11 「ページ名の変更」も同様に修正 #

plugin/rename.inc.phpに3箇所 size="80"があるので、次のように修正:

$ diff -u rename.inc.php~ rename.inc.php
--- rename.inc.php~     Sat Jul 31 12:09:20 2004
+++ rename.inc.php      Sat Jun 11 22:05:56 2005
@@ -116,7 +116,7 @@
 //第一段階:ページ名または正規表現の入力
 function rename_phase1($err = '', $page = '')
 {
-       global $script, $_rename_messages;
+       global $script, $_rename_messages, $newpage_cols;

        $msg    = rename_err($err, $page);
        $refer  = rename_getvar('refer');
@@ -148,9 +148,9 @@
   <input type="radio" name="method" value="regex"$radio_regex />
   {$_rename_messages['msg_regex']}:<br />
   From:<br />
-  <input type="text" name="src" size="80" value="$s_src" /><br />
+  <input type="text" name="src" size="$newpage_cols" value="$s_src" /><br />
   To:<br />
-  <input type="text" name="dst" size="80" value="$s_dst" /><br />
+  <input type="text" name="dst" size="$newpage_cols" value="$s_dst" /><br />
   <input type="submit" value="{$_rename_messages['btn_next']}" /><br />
  </div>
 </form>
@@ -161,7 +161,7 @@
 //第二段階:新しい名前の入力
 function rename_phase2($err = '')
 {
-       global $script, $_rename_messages;
+       global $script, $_rename_messages, $newpage_cols;

        $msg   = rename_err($err);
        $page  = rename_getvar('page');
@@ -192,7 +192,7 @@
   <input type="hidden" name="plugin" value="rename" />
   <input type="hidden" name="refer"  value="$s_refer" />
   $msg_rename<br />
-  {$_rename_messages['msg_newname']}:<input type="text" name="page" size="80" value="$s_page" /><br />
+  {$_rename_messages['msg_newname']}:<input type="text" name="page" size="$newpage_cols" value="$s_page" /><br />
   $msg_related
   <input type="submit" value="{$_rename_messages['btn_next']}" /><br />
  </div>
[編集]

2005-06-07 #

[編集]

[PukiWiki] ページがないときはページの編集画面ではなく404とエラーメッセージを出力 #

PukiWiki/改造/ページがないときは404を出力 - cubic9.com

  • 404出力で、discypus.jpの静的コンテンツみたいにWayBack Engineへのリンクと、Pukiwikiの上位階層へのリンクを表示したいし、 その上で改めて編集も選べるようにしたいし。

ja.lngはcubic9.comのと同じで(注:長い行の後ろに\を入れてます):

$ diff -u ja.lng~ ja.lng
--- ja.lng~     Sun Apr 24 14:16:56 2005
+++ ja.lng      Tue Jun  7 23:21:52 2005
@@ -32,7 +32,7 @@
 確認後、[ページの更新]を押してください。<br />';
 $_msg_invalidiwn = '$1 は有効な $2 ではありません。';
 $_msg_invalidpass = 'パスワードが間違っています。';
-$_msg_notfound = '指定されたページは見つかりませんでした。';
+$_msg_notfound = '指定されたページは見つかりませんでした。<br /><a href="$1">編集</a>するか、\
<a href="$2">親ディレクトリ</a>にアクセスしてみて下さい。';
 $_msg_addline = '追加された行は<span class="diff_added">この色</span>です。';
 $_msg_delline = '削除された行は<span class="diff_removed">この色</span>です。';
 $_msg_goto = '$1 へ行く。';

plugin/newpage.inc.phpもcubic9.comのと同じで:

$ diff -u newpage.inc.php~ newpage.inc.php
--- newpage.inc.php~    Sat Jul 31 12:09:20 2004
+++ newpage.inc.php     Tue Jun  7 23:24:23 2005
@@ -43,7 +43,7 @@
                get_fullname($page,$vars['refer']) : $page);
        $r_refer = rawurlencode($vars['refer']);

-       header("Location: $script?cmd=read&page=$r_page&refer=$r_refer");
+       header("Location: $script?cmd=edit&page=$r_page&refer=$r_refer");
        die();
}
?>

plugin/read.inc.phpはcubic9.comのものから、編集リンク(?cmd=edit...)と親へのリンク(preg_replaseの部分)を修正:

$ diff -u read.inc.php~ read.inc.php
--- read.inc.php~       Wed Aug  4 22:43:23 2004
+++ read.inc.php        Tue Jun  7 23:34:30 2005
@@ -8,7 +8,7 @@

 function plugin_read_action()
 {
-       global $vars, $_title_invalidwn, $_msg_invalidiwn;
+       global $vars, $_title_invalidwn, $_msg_invalidiwn, $_msg_notfound;

        $page = isset($vars['page']) ? $vars['page'] : '';

@@ -22,8 +22,12 @@
                return do_plugin_action('interwiki'); // InterWikiNameを処理

        } else if (is_pagename($page)) {
-               $vars['cmd'] = 'edit';
-               return do_plugin_action('edit'); // 存在しないので、編集フォームを表示
+               header('HTTP/1.0 404 Not Found');
+               return array(
+                       'msg'=>'NOT FOUND',
+                       'body'=>str_replace('$1', "?cmd=edit&amp;page=$page",
+                       str_replace('$2', preg_replace('/\/[^\/]+$/','','?'.$page), $_msg_notfound))
+               );

        } else {
                // 無効なページ名
[編集]

TODO 2005-06-09 サイト内へのリンクの修正ミス指摘の連絡先をメッセージに追加したい #

指定されたページは見つかりませんでした。
編集するか親ディレクトリにアクセスしてみて下さい。

を修正して、次の項目も追加したい。(discypus.jpの静的ページの404 Not Found画面に似せる)

  • リンクミスを見つけたときの連絡先(コメントページなど)
  • 検索ページの案内
  • WebArchive Wayback Machineへのリンク
[編集]

2005-06-09 「新規」リンクを押すと、404のページが表示されてしまう。 #

…なので、一手間増えるのは面倒だが、しかたないかも。

[編集]

[Debian] Sargeがリリースされたのでsources.listを修正 #

Sargeがリリースされたので、/etc/apt/sources.listの'stable'を'woody'に変更。

とは言っても、もともと次の1行しかstableは使ってなかったけど:

deb http://security.debian.org stable/updates main contrib non-free

これを次のように書き換えて、apt-get updateして完了。

deb http://security.debian.org woody/updates main contrib non-free
[編集]

2005-06-05 #

[編集]

[PukiWiki] ページの新規作成時に「タイムスタンプを変更しない」指定すると「最新の〜」に載せないようにする #

PukiWiki/改造/新規作成時最新の〜に載せない - cubic9.com

$ diff -u file.php~ file.php
--- file.php~   Thu Apr 21 02:42:20 2005
+++ file.php    Sun Jun  5 13:09:09 2005
@@ -115,8 +115,12 @@
                $str = preg_replace("/\r/", '', $str);
                $str = rtrim($str) . "\n";

-               if ($notimestamp and file_exists($file)) {
-                       $timestamp = filemtime($file) - LOCALZONE;
+               if ($notimestamp) {
+                       if (file_exists($file)) {
+                               $timestamp = filemtime($file) - LOCALZONE;
+                       } else {
+                               $timestamp = gmmktime(0,0,0,1,1,2000) - LOCALZONE;
+                       }
                }

なるほど、「タイムスタンプを変更しない」($notimestamp No timestamp) で既存ファイルが存在しない(file_exists の else)ときに、 タイプスタンプを2000/01/01 00:00:00 にするのか。

  • 余談。PHPの月って1-originなのか。gmmktime mktime (c,java,perlは0-originだったような)
[編集]

2005-06-02 #

[編集]

[pukiwiki] ユーザのパスワードをmd5にする #

PukiWiki/1.4/ちょっと便利に/任意のページごとの閲覧・編集制限 - コメントより。

lib/auth.phpを修正

$ diff -u auth.php~ auth.php
--- auth.php~   Sun Aug  1 10:54:35 2004
+++ auth.php    Thu Jun  2 23:36:50 2005
@@ -102,7 +102,7 @@
        if (!isset($_SERVER['PHP_AUTH_USER'])
                or !in_array($_SERVER['PHP_AUTH_USER'],$user_list)
                or !array_key_exists($_SERVER['PHP_AUTH_USER'],$auth_users)
-               or $auth_users[$_SERVER['PHP_AUTH_USER']] != $_SERVER['PHP_AUTH_PW'])
+               or $auth_users[$_SERVER['PHP_AUTH_USER']] != md5($_SERVER['PHP_AUTH_PW']))
        {
                if ($auth_flag)
                {

pukiwiki.ini.phpの

$auth_users = array(
        'username' => 'ここをmd5に',
);
[編集]

2005-05-19 #

[編集]

[PukiWiki] Errata - Default setting of file-attaching function allows XSS (- 1.4.5_1) #

http://pukiwiki.sourceforge.jp/index.php?%3AErrata#qf91cd08

  • とりあえず「(2) attachプラグイン(plugin/attach.inc.php, attachref.inc.php)の先頭にある設定を変更し、管理者だけが添付ファイルをアップロードできるようにする」で対処。
[編集]

2005-05-07 #

[編集]

[PukiWiki] ページの一覧、ページファイルの一覧のリンクから 'cmd=read&page=' を削除 #

ページの一覧(?cmd=list)、ページファイルの一覧(?cmd=filelist)のリンクから 'cmd=read&page='を削除する。

ページの一覧、ページファイルの一覧のリンクはlib/func.phpのpage_list関数が作成している。 そこで、$cmdが'read'のときだけ、'cmd=read&page='を出力しないようにしてみた。

func.phpより引用:

// ページ一覧の作成
function page_list($pages, $cmd = 'read', $withfilename = FALSE)

page_list関数の使用個所をリストアップ:

$ find . -name '*.php' -type f  | xargs grep page_list
./lib/func.php:function page_list($pages, $cmd = 'read', $withfilename = FALSE)
./plugin/backup.inc.php:        return page_list($pages,'backup',$withfilename);
./plugin/deleted.inc.php:       $retval['body'] = page_list($deleted_pages,'backup',$withfilename);
./plugin/list.inc.php:  return page_list($pages,'read',$withfilename);
./plugin/referer.inc.php:               'body' => page_list($pages,'referer',FALSE)
./plugin/tb.inc.php:            return array('msg'=>'trackback list', 'body'=>page_list($pages, 'read', FALSE));

$cmdが'read'のときだけ、'cmd=read&page='を出力しないよう、page_list関数を次のように修正。 PHPの文字列比較ってどうやるのかよく知らないので、おおざっぱにstrcmpで比較してみた。

$ diff func.php.bak func.php
291c291,296
<               $str = "   <li><a href=\"$script?cmd=$cmd&amp;page=$r_page\">$s_page</a>$passage";
---
>               if (strcmp($cmd, 'read') == 0) {
>                       // $cmdがreadのときは、cmdとpageを省く。
>                       $str = "   <li><a href=\"$script?$r_page\">$s_page</a>$passage";
>               } else {
>                       $str = "   <li><a href=\"$script?cmd=$cmd&amp;page=$r_page\">$s_page</a>$passage";
>               }
[編集]

2005-04-24 #

[編集]

[PukiWiki] アンカーを示すマークを「†」から「#」に変更 #

ja.lngの$_symbol_anchorを#に変更。#はnumberって意味もあるから誤解されるかも知れないが、 †は脚注のように見えるので。

///////////////////////////////////////
// symbols
$_symbol_anchor = '#';
//$_symbol_anchor = '&dagger;';
$_symbol_noexists = '?';

///////////////////////////////////////
[編集]

2005-04-23 #

[編集]

[PukiWiki] gcounter #

pukiwiki:自作プラグイン/gcounter.inc.php を設置した。

初期値を求めるために、全ページのカウンタの合計を次のスクリプトで算出し、 直接カウンタに設定(ファイル書き換え)した。

wikicount (GNU awkスクリプト)

#!/usr/bin/gawk -f

FILENAME ~ /gcounterで使うページのカウンタファイル名/ { nextfile }
FNR == 1 { all += $1 }
FNR == 3 { today += $1 }
FNR == 4 { yesterday += $1 }
FNR == 5 { nextfile }
END {
    print "all=" all
    print "today=" today
    print "yesterday=" yesterday
}
$ ./wikicount path/to/pukiwiki/wiki/counter/*.count
all=569634
today=1612
yesterday=2010

gcounterを使って、各ページでこのサイト全体の「昨日のアクセス」の合計を表示した。
例えば、各ページの上の

更新: 2005-04-21 (木) (3d) / アクセス 昨日:54 (2010) 今日:23 合計:19758 / 接続:5

の「昨日:54 (2010)」の2010の部分。

[編集]

2005-04-21 #

[編集]

[PukiWiki] ページの更新日時から時刻を消す #

このサイトはさほど更新していないので、更新時刻はさほど重要ではない。 よって、時刻を消して見やすくする。(ここに new! とか update! とか出せると面白いかも)

# タイムゾーンが判らなくなるだろうけど…。

pukiwiki.skin.ja.phpで$lastmodifiedから時刻を消しても良いけど(正規表現やsubstrで)、

lib/func.php ... format_dateをコピーして、format_dateonlyを作る。

// 日時文字列を作る(日付曜日のみ)
function format_dateonly($val, $paren = FALSE)
{
        global $date_format, $time_format, $weeklabels;

        $val += ZONETIME;

        $ins_date = date($date_format, $val);
        $ins_week = '(' . $weeklabels[date('w', $val)] . ')';

        $ins = "$ins_date $ins_week $ins_time";
        return $paren ? "($ins)" : $ins;
}

lib/html.php ... $lastmodifiedに代入する個所で、format_dateをformat_dateonlyに置き換える。

       // ページの最終更新時刻(文字列)
       $lastmodified = $is_read ?
               format_dateonly(get_filetime($_page)).' '.get_pg_passage($_page,FALSE) : '';
[編集]

[PukiWiki] ページのリンク先ページを表示しない #

PukiWiki のカスタマイズ , PukiWiki のカスタマイズ (2) - ナビゲーション , PukiWiki のカスタマイズ (3) - 画面デザイン , PukiWiki.. (machu.jp) より。

lib/file.php

//あるページの関連ページを得る
function links_get_related($page)
{
        global $vars, $related;
        static $links = array();

        if (isset($links[$page])) return $links[$page];

        // 可能ならmake_link()で生成した関連ページを取り込む
//      $links[$page] = ($page == $vars['page']) ? $related : array(); // ★コレをコメントアウト
        $links[$page] = array();  // ★コレを追加

        // データベースから関連ページを得る
        $links[$page] += links_get_related_db($vars['page']);

        return $links[$page];
}
[編集]

2005-03-21 #

[編集]

[PukiWiki] 「cmd=read」を使ったページをサーチエンジンが記憶しないようにする #

Yahoo!が「cmd=read」つきのページをたくさん記憶しているので、 これを抑制するためにskin/pukiwiki.skin.ja.phpを次のように修正してみた。

元の:

<?php if (!$is_read ) { ?>
 <meta name="robots" content="NOINDEX,NOFOLLOW" />
<?php } ?>

修正後:

<?php if (!$is_read ) { ?>
 <meta name="robots" content="NOINDEX,NOFOLLOW" />
<?php } elseif (strpos($_SERVER['REQUEST_URI'], 'cmd=read') !== false) { ?>
 <meta name="robots" content="NOINDEX" />
<?php } ?>
[編集]

[PukiWiki] スタイルシートとスキンの修正 #

  • div#body p を追加、margin-left:1em; line-height:150%; に。
  • h2, h3, h4のデザインを変更。borderを細めに、色はロゴで使っている色の類似色にした。
  • <hr> を <div></div>に置き換えて、divのスタイルで線を引くようにした。 Internet explorerだとhrが太く(上下2本線が引かれるようで)なるけど回避手段が判らなかったので。
  • navigator, toolbar, $notes, $attaches, $related の前の<hr>を削除、divのスタイルで線を引くようにした。
  • navigator, toolbarの項目間の|にもspanで色を付けてみた。
[編集]

2005-03-11 #

[編集]

[PukiWiki] 添付ファイルのアイコンを表示しないように #

ref.inc.phpとattach.inc.phpの先頭付近に次の行を挿入。

define('FILE_ICON', '');
[編集]

2005-03-03 #

[編集]

[PukiWiki] 表紙(SSI)にPukiWikiの更新日を表示 #

PukiWikiのデータディレクトリの更新日を表紙に表示しようとした。 でも、このディレクトリはSSIで参照できない場所にあるので、無理。

そこで、PukiWikiのデータディレクトリをチェックし、更新日をDocumentRoot以下のファイルに 反映させるスクリプトを用意し:

#!/bin/sh
/usr/bin/touch --reference={PukiWikiのデータディレクトリ} {DocumentRoot下のファイル}

これをcronで定期的に実行、SSIでこのファイルの更新日を次のようにして参照するようにした:

<!--#config timefmt="%Y.%m.%d" --><!--#flastmod virtual="{DocumentRoot下のファイル}" -->

こんな面倒な事せずに、表紙をPHPで書き直せって?……そのとおりです。

[編集]

2005-03-25 #

pukiwiki.ini.phpで、次のようにすればOK。

$update_exec = '/usr/bin/touch DocumentRoot下のファイル';

…てなことは前に気がついてたのだけど、直すのをすっかり忘れてた。

[編集]

HTMLに対しては #

HTMLコンテンツに対しては、Namazu (mknmz)をcronで実行しているので、 ファイルの変更があればNMZ.iiが更新される事を利用して、次のようにしている。

/usr/bin/touch --reference={Namazuのインデックスディレクトリ/NMZ.ii} {DocumentRoot下のファイル}
[編集]

[PukiWiki] メールアドレスをHTMLの数値文字参照で表示する #

メールアドレスをHTMLエンティティ生成で 数値文字参照(&#ddd)で表記すると、PukiWikiがメールアドレスと認識しない。

次のようにしても、InterWikiNameと見なされるので、だめ(あたりまえだけど)。

[[mailto:hogehoge@example.jp]]

そこで、次のようなファイルを用意し:

<a href="mailto:hogehoge@example.jp">hogehoge@example.jp</a>

これをhtmlinsertプラグインでinsertした。

PukiWikiのプラグイン書いた方がいいって……その通り。 メールアドレスをランダムに数値文字参照に置き換えるプラグインがあれば、便利かも。

[編集]

2005-02-28 #

[編集]

サーチエンジンが持ってる旧URL #

旧URL「/pukiwiki/」「/pukiwiki.php」とサイト全体について検索。

旧URL Google 検索: site:discypus.jp "pukiwiki.php" -"/wiki/"

  • 2,170 件
  • 576 件 (2005-03-30)
  • 298 件 (2005-04-24)
  • 262 件 (2005-06-02)
  • 1,770 件 (2005-07-06)
  • 1,800 件 (2005-09-19)

サイト全体 Google 検索: site:discypus.jp

  • 9,130 件
  • 9,410 件 (2005-03-30)
  • 8,710 件 (2005-04-24)
  • 10,000 件 (2005-06-02)
  • 10,700 件 (2005-07-06)
  • 922 件 (2005-09-19)

旧URL Yahoo!検索 - pukiwiki.php#wiki

  • 421 件
  • 238 件 (2005-03-30)
  • 1 件 (2005-04-24)
  • 0 件 (2005-06-02)
  • 0 件 (2005-07-06)
  • 1,250 件 (2005-09-19)

サイト全体 Yahoo!検索 - discypus

  • 681 件
  • 2,666 件 (2005-03-30)
  • 2,606 件 (2005-04-24)
  • 1,290 件 (2005-06-02)
  • 822 件 (2005-07-06)
  • 4,220 件 (2005-09-19)
[編集]

2005-02-26 #

[編集]

[PukiWiki] ls2_1.inc.php.24のインストール #

pukiwiki:自作プラグイン/ls2_1.inc.phpをインストール(改行コードをLFに替えて)した。

このとき「cmd=read&page=hogehoge」を「?hogehoge」になるよう、修正した。

--- ls2_1.inc.php.24	2005-02-27 00:19:38.683936200 +0900
+++ ls2_1.inc.php	2005-02-26 23:42:21.347897300 +0900
@@ -445,7 +445,7 @@
     $s_page = htmlspecialchars($page);
     $title = $s_page . ' ' . get_pg_passage($page, false);
     $r_page = rawurlencode($page);
-    $href = $script . '?cmd=read&amp;page=' . $r_page;
+    $href = $script . '?' . $r_page;
     // relative オプション。リンク名制御。
     if ($params['relative']) {
         // パターンの最後の / 以下を取り除く。例) sample/test/d -> sample/test
[編集]

[PukiWiki] exlinkの表示を文字に変える #

JavaScriptを修正し、アイコンの代わりに⇒を表示するよう修正した。

function external_link(){
   var host_Name = "discypus.jp";
   var host_Check;
   var link_Href;
   for(var i=0; i < document.links.length; ++i) {
       link_Href = document.links[i].href;
       host_Check = link_Href.indexOf(host_Name);
       if(host_Check == -1){
           document.links[i].innerHTML = "&rArr;" + document.links[i].innerHTML;
       }
   }
}
window.onload = external_link;
  • マークは « とか » とか ⇑ でもいいかも。
  • URLの後ろにマークを置いた方がよいかも。
[編集]

2005-02-20 #

[編集]

[PukiWiki] exlinkプラグインの外部リンクの判別条件を緩くする。 #

Google翻訳などを使うと、ほとんどすべてのリンクが外部リンクと判断されるので、 あえて判別条件をゆるくする。

具体的には:

  • ホスト名はJavaScriptに埋め込む。
  • Linkオブジェクトのhostではなく、hrefで検査する。
function external_link(){
   var host_Name = "discypus.jp";
   var host_Check;
   var link_Href;

   for(var i=0; i < document.links.length; ++i)
   {
       link_Href = document.links[i].href;
       host_Check = link_Href.indexOf(host_Name);

       if(host_Check == -1){
           document.links[i].innerHTML = "<img src=\"image/external_link.png\" 
height=\"11px\" width=\"11px\" alt=\"外部リンク\" title=\"外部リンク\" 
class=\"external_link\" />" + document.links[i].innerHTML;
       }
   }
}
window.onload = external_link;

翻訳結果は……。

Cygwin/apache/php

Google翻訳

Excite翻訳

[編集]

ひたすらRedirect #

既存のコンテンツ(*.shtml) のうちPukiWikiに移した物は削除し、かわりに Redirect するようにした。

  • httpd.conf で AllowOverride FileInfo。(すでに設定済み)
  • .htaccess を各ディレクトリに置き、Redirect permanentをひたすら記入。 たとえばこんなの:
    Redirect permanent /midi/index.shtml http://discypus.jp/wiki/?Music%2F%B3%DA%B4%EF
  • 実際にアクセスして、access.logでステータスコード301(Permanent)になっている事を確認。 (お手製のaccess.log解析CGI(非公開…遅いので非実用的)で確認)

これで、従来のコンテンツをアクセスしなくなったので、各ページのSSIアクセスカウンタも 更新されなくなった。ちょっとさびしい。

[編集]

2005-02-27 #

だめもとで、アンカーもリダイレクトしてくれいるかどうか試してみた。

Redirect permanent /pc/linux/etc.shtml#dhcpd.cgi \
http://discypus.jp/wiki/?Linux%2Fdhcpd%2Cipchains%2Cppp%A5%ED%A5%B0%C9%BD%BC%A8CGI#xa1de3a1

…ダメでした。

[編集]

[PukiWiki] urlbookmarkプラグインを設置 #

自作プラグイン/urlbookmark.inc.php

文字コードを確認(EUC-JP)後、コピーしただけ。

[編集]

2005-02-18 #

[編集]

[PukiWiki] リンクが「?cmd=read&page=ほげほげ」のリダイレクト…未解決。 #

できれば、Apacheの方でもRedirectしたい。「?cmd=read&page=ほげほげ」へ リンクされてることが結構あるし、サーチエンジンも今のところそうだし (こちらは1〜3ヶ月後には解消するだろうけど)

Apache 1.3 URL Rewriting Guide
http://httpd.apache.org/docs/misc/rewriteguide.html

「?cmd=read&page=([^&]+)$」がリクエストされたら「?$1」に置き換えたアドレスに リダイレクト(ステータスコード301で)できればよいわけで。

mod_rewrite風にいうと:

RewriteRule /wiki/\?cmd=read&page=([^&]+)$ /wiki/?$1 [R=301,L]

な感じ。でも、mod_rewriteは?以後(QUERY_STRING) の一部分を抜きだせなかったと 思う…。

NPH-CGI 書いて組み合わせるか、自分でApacheモジュール書かんとあかんのかな…。

  1. NPH-CGIをperlで書く。
  2. NPH-CGIをC言語で書き直す
  3. mod_perlでモジュールを書く
  4. Apacheモジュールを書く。

いっそ、PukiWikiの lib/init.php あたりで細工したほうがよいのかも。 (自分の技量じゃ、そもそも可能なのか判断できないけど)

[編集]

[PukiWiki] タイトルの修正の修正(の、予定) #

(普通はやらないであろう)topicpath を ページタイトル (<h1>) に使用しちゃったので、FrontPageとかRecentChangeとかのページタイトルが出なくなったのを修正する予定。

PHPはほとんど知らないけど、topicpathの結果が""なら<title></title>に使ってる 文字列に置き換えちゃえ…。あるいはtopicpath自体を書き換えたほうがよいかな。

[編集]

修正した (2005-02-21) #

[編集]

2005-02-17 #

[編集]

[PukiWiki] ls2 プラグインをちょいと修正 #

生成されるリンクが「?cmd=read&page=ほげほげ」なので、「?ほげほげ」に変更。

$ diff -u ls2.inc.php.org ls2.inc.php
--- ls2.inc.php.org     Thu Feb 17 01:15:23 2005
+++ ls2.inc.php Thu Feb 17 01:16:35 2005
@@ -155,7 +155,7 @@
        $r_page = rawurlencode($page);
        $s_page = htmlspecialchars($page);
        $title  = $s_page . ' ' . get_pg_passage($page, FALSE);
-       $href   = $script . '?cmd=read&amp;page=' . $r_page;
+       $href   = $script . '?' . $r_page;

        ls2_list_push($params, $level);
        $ret = $include ? '<li>include ' : '<li>';
[編集]

2005-02-16 #

[編集]

[PukiWiki] exlink プラグインをちょっと修正 #

Googleのキャッシュに入るとリンクが全部外部リンクとみなされる(当たり前)なので、 ホスト名をハードコードした。

 var host_Name = "discypus.jp";

サーチエンジンからのアクセスでは無効にすればいいのだけど、 手段を考えるのが面倒なので、とりあえずはこれで。

[編集]

2005-02-13 #

[編集]

[PukiWiki] popular2 プラグイン #

昨日の人気のある(アクセス数の多い)ページの一覧を表示する popular2 プラグインを入れた。 (入れたと思ってて忘れてた)

自作プラグイン/popular2.inc.php

[編集]

2005-02-12 #

[編集]

[PukiWiki] URL変更 #

変更して2週間もたってない(2005-01-31#新URLへ変更)のに、URLを変更。

/pukiwiki.php? を /wiki/? に変更。

もともと DirectoryIndex index.php を設定してあったので、 シンボリックリンクを張って(wiki -> pukiwiki-1.4.4)から、 httpd.confの設定を変更。

変更前:

Redirect permanent /pukiwiki/pukiwiki.php http://discypus.jp/pukiwiki.php
Redirect permanent /pukiwiki/ http://discypus.jp/pukiwiki.php
Alias /pukiwiki.php /path/to/htdocs/pukiwiki-1.4.4/pukiwiki.php

変更後:

Redirect permanent /pukiwiki/pukiwiki.php http://discypus.jp/wiki/
Redirect permanent /pukiwiki/ http://discypus.jp/wiki/
Redirect permanent /pukiwiki.php http://discypus.jp/wiki/

discypus.jpの静的コンテンツをPukiWikiに移動した。(リンク集が3つ残っているが…)

mod_alias - Apache HTTP サーバ
http://httpd.apache.org/docs-2.0/mod/mod_alias.html#redirect

  • 2005-08-27 Redirect先のURLは「http://〜」から書く必要がある。サーバ上の設定はそのようにしていたが、 この「URL変更」項目では間違った記述のままだったので、修正した。
[編集]

2005-01-31 #

[編集]

[PukiWiki] PukiWiki 1.4.4 にアップデート、URL変更。 #

[編集]

1.4.2 → 1.4.4 にアップデート #

  • pukiwiki-1.4.4.tar.gz を別のディレクトリに展開
  • パーミッションの設定変更。
  • シンボリックリンク作成。
  • Apache で Alias を設定。
  • 最低限の設定。
  • 既存のデータをコピーし、挙動を確認。
  • 動作確認(新規作成、変更、名称変更、削除)
[編集]

カスタマイズ、プラグインの設定 #

  • カスタマイズ。skinとcss。html.phpの「ページの最終更新時刻」も変更。
  • paraedit ParaEdit
    lib/pukiwiki.php, pukiwiki.ja.skin, lib/convert_html.php を修正、 paraeditの表示も修正。
  • topicpath 標準プラグイン?
    ページタイトル (<h1>) に使用するため、skinを修正、プラグイン本体の設定も修正。
    FrontPageとかRecentChangeとかのページタイトルが出なくなったけど、まあいいや。
[編集]

新URLへ変更 #

  • ApacheのRedirectMatchで、旧アドレスへのアクセスを新アドレスにリダイレクトした。
  • http://discypus.jpとnifty.comのHTMLコンテンツのリンク先を新アドレスに変更した。
[編集]

旧ページの削除、バックアップ設定の変更 #

  • 旧1.4.2のページをアクセスできないように変更 (Apacheから見えない位置に移動)
  • バックアップ #n9210911 も1.4.4のデータを保存するように変更。
[編集]

エラー #

ページ(44KB, 1238行) を修正したら次のエラーが出た。

Fatal error: Allowed memory size of 8388608 bytes exhausted 
(tried to allocate 1979377 bytes) 

メモリはまだ余裕があるので、ちょっとだけメモリサイズを増やしてみた。php.ini を修正。(8MB→12MB)

memory_limit = 12M      ; Maximum amount of memory a script may consume (8MB)