PHP5.4系にアップデート PukiWiki対応

2013/2/17

以前にPHP 5.4系にアップデートしようと試みましたが、運用中のPukiWiki (1.4.7 UTF-8版)が対応せず断念したことがありました。

該当記事: サーバー保守 ・ 

しかしながら、remiリポジトリも5.4系に移行したこともあり、重い腰を上げていざアップデートへ。
あと、eAcceleratorがエラーで入らなかったのでAPCをインストール。(⇒ 仮メモ: CentOS5でRemiのPHP5.4にupdateするとエラー


さて、PukiWikiの修正に入りましょう。

まずは、hex2bin関数がPHPの組み込み関数と競合する問題(PukiWiki-Dev: BugTrack2/349)の修正。
PHP5.3に戻すこともないのでhex2bin関数をコメントアウトします。

/*
// Inversion of bin2hex()
function hex2bin($hex_string)
{
	// preg_match : Avoid warning : pack(): Type H: illegal hex digit ...
	// (string)   : Always treat as string (not int etc). See BugTrack2/31
	return preg_match('/^[0-9a-f]+$/i', $hex_string) ?
		pack('H*', (string)$hex_string) : $hex_string;
}
*/

加えて、コール時の参照渡し(Call-time pass-by-reference)が廃止されているために動かないプラグインがいくつか。
BugTrackの方にはls2とpcommentが挙がっていますが、前回試みた際に発生したMenuバーが表示されない問題はonlineプラグインにありました。

// array_walk($args, 'plugin_ls2_check_arg', & $params);
array_walk($args, 'plugin_ls2_check_arg', $params);
// array_walk($args, 'plugin_pcomment_check_arg', & $params);
array_walk($args, 'plugin_pcomment_check_arg', $params);
// if (plugin_online_check_online(& $count, $host)) {
if (plugin_online_check_online($count, $host)) {

これでたぶんFatal errorは解決するので、ほぼ問題なく動くと思います。
(EUC-JP版PukiWikiの場合、厄介なhtmlspecialcharsの非互換問題の対応が必要です。)

あとはslashdot:martianの日記: PHP5.4 と PukiWikiを(2)(3)とかを。
参照渡し周りとか箇所が多いのでコードは省略。
また、設定してなければタイムゾーンを設定。

date.timezone = "Asia/Tokyo"

やっぱエラー直したい!という方はこちらnowsky様「PukiWiki/error」のWikiが詳しいです。

こんな感じで一応動いています。触っているうちに何かエラーが発生するかもしれません。
PukiWikiでもCVS版であれば、hex2binの修正だけでどうやら動くようです。
しかしながら、本家PukiWikiはほぼ開発停止のようなものですからね・・・
CVS版を取り込んでいるPukiWiki Plus!で運用してみたサイトもあるのですが、なかなか良い感じです。
更にこれを発展させPHP5.4対応のPukiWiki Advanceというのもあり、かなり改変が加えられていて前衛的な機能が実装されています。
機会があれば試してみようと思います。

サーバー機 CPU交換 Pentium Dual-Core E2160

2013/2/11

安く手に入ったので、自宅サーバーのCPUを以前のCeleron 430からPentium Dual-Core E2160 (Stepping: M-0)へ換装。
このような零細ブログ・サイト程度ではCeleronでも十分だったのですが、マルチコアにしたかった・・・だけです。
TDP 35Wから65Wへの増大は痛いですが、L2 Chacheが2倍の1Mと、Single-CoreからDual-Coreでどの程度恩恵が受けられるか。

まずはサクッと換装。正常に認識。

$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 15
model name      : Intel(R) Pentium(R) Dual  CPU  E2160  @ 1.80GHz
stepping        : 13
cpu MHz         : 1800.000
cache size      : 1024 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 2
apicid          : 0
initial apicid  : 0
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 10
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm dts
bogomips        : 3591.03
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual

さて、性能向上はいかほど。
Apache Bench(ab)で測定し、結果を比較。対象はこのブログのトップページ。

Read more…