rep2」タグアーカイブ

Ubuntu9.04のPHP環境にAPCを入れてrep2を高速化


Ubuntu9.04環境上に2chビューア「rep2」を入れて自分用に運用していますが、少しでもレスポンスがよくならないかと思案の末、APC (Alternative PHP Cache) というのをインストールしてみました。APCはPHPの実行時に生成される中間コードをキャッシュして再利用するので、レスポンスの改善が期待できます。

Ubuntu9.04の場合、都合よく「php-apc」というパッケージがあるので、それをapt-getでインストールすれば基本的なセットアップは終了ととってもお手軽。phpinfoで「APC」の項目があればAPCが有効になっています。

で、肝心のrep2のレスポンスですが、なんとなく速くなったかな~という感じです。rep2の場合、通信にかかる時間がレスポンス時間の割合の多くを占めると考えられるため、キャッシュの効果は限定的なのかもしれません。それでも少しでも速くなったのでよしということで、もう少しこの環境で使ってみようと思います。

rep2の細かいバグ修正


p2 – PHPで作った2ch Viewer

p2(rep2)は、Webサーバーにインストールして使うことを想定した2chビューアーです。私はずっと派生版「p2機能拡張パック」を使っていたのですが、2008年9月以降更新された気配がなく今後のサポートが不安になっていました(PHPなので自分で直すことも出来ますし、実際結構手を入れてるのですが)。

それで、純正のrep2最新版(v1.8.42)もぼちぼち評価しておこうと思いサーバーにインストールしたのですが、iPhoneから見たときの挙動が何かおかしい。

a) 最初のページがやたら小さく(iPhoneの画面サイズに最適化されず)表示される。
b) 板名が文字化けする(「携帯・PHS」が化けました)

というわけで、自分でちょくちょく直してみました。

a)については、iPhoneに画面サイズを最適化するためのviewportの設定が、なぜかindex.phpに対してだけは行われないようになっていたので、lib/P2View内のprintHeadMetasHtmlメソッドで

if (!(basename($_SERVER[‘SCRIPT_NAME’]) == ‘index.php’)) {

if (true || !(basename($_SERVER[‘SCRIPT_NAME’]) == ‘index.php’)) {

と書き換えました(要するにこのif自体を無効にしました)。わざわざこんなコードを書くからには、index.phpにviewportを出力しない理由があったのだと思いますが、とりあえずこの修正でうちの環境ではうまく動くようになったのでその辺は深く考えずに。仕事じゃないし。

b)については、散々コードを読み漁った結果、iphone/ShowBrdMenuk.phpのprintItaメソッド、printItaSearchメソッド内でクエリ変数$itaj_enが正しくURLエンコードされていないために起こることを突き止めました。

修正は

echo  “…itaj_en={$mita->itaj_en}…";

$itaj_en_encoded = rawurlencode($mita->itaj_en);
echo  "…itaj_en={$itaj_en_encoded}…";

のような感じで、URLエンコードした変数に差し替えてやります。

なお本故障は、$itaj_en(BASE64エンコードされた板名)に「+」を含む場合に表面化するようです。

これだけ修正を入れることで、うちの環境(Ubuntu9.04 on VMware ESXi 3.5)ではrep2のiPhone用画面がうまく動くようになりました。参考までに。

iPhone3.0でrep2機能拡張パックのレスポップアップが化ける件


iPhoneを3.0にアップグレードしたとたん、rep2機能拡張パックのレスポップアップが化けるようになりました。

自分で直してやろうとソースをいろいろあさった結果、js/respopup_iphone.jsの109行目、

.replace(/<[^<>]+? id=”/, ‘$0’ + popid + ‘_’); //”

を、

.replace(/(<[^<>]+? id=”)/, ‘$1’ + popid + ‘_’); //”

とすることで修正が出来ました。どうもJavaScriptの正規表現で、置換する際にマッチした文字列全体を現す「$0」が使えなくなっているようです。仕方ないのでマッチ文字列全体を()でくくって、$1を使用することで同じ処理としました。なぜ今まで通っていたものが通らなくなるのかよくわからないのですが、解決できたので良しとします。