jcode.plのエラー
久しぶりにレンタルサーバーのエラーログを見たところ,予想もしていなかった大量のエラーが吐き出されていた。
よくよく見てみると,共通して jcode.pl に関係するものであり,どうも2つの行に問題があることがわかった。多分,少々書き直せばいいのだろうが,具体的にどう修正すればいいのかがわからない。調べて見ると,やはり同様のエラーで困っている人たちがいて,エラー回避の方法についても意見がまちまちのようだった。
ただ,どうやらサーバーのPerlがバージョンアップしたことによって,このバージョンでは非推奨となった関数があり,これまで使っていたプログラムが引っかかったということがわかってきた。つまり,それを正規のものに直してやればいいわけだ。
修正コード
こういうことというのは,既に試している人がいるものだ。それを真似て書き直してみた。
実際には,これまで使っていた jcode.pl をバックアップ(ファイル名を jcode.pl.bak などにしてコピー)した上で,エディターで開いて当該箇所をコメントアウトし,公開してくれているプログラムを貼り付ければいいだけのことだ。
;#sub z2h_euc { ;#local(*s, $n) = @_; ;#&init_z2h_euc unless defined %z2h_euc; ;#$s =~ s/($re_euc_c|$re_euc_kana)/$z2h_euc{$1} ? ($n++, $z2h_euc{$1}) : $1/geo; ;#$n; ;#} ;#sub z2h_sjis { ;#local(*s, $n) = @_; ;#&init_z2h_sjis unless defined %z2h_sjis; ;#$s =~ s/($re_sjis_c)/$z2h_sjis{$1} ? ($n++, $z2h_sjis{$1}) : $1/geo; ;#$n; ;#} sub z2h_euc { local(*s, $n) = @_; &init_z2h_euc if !%z2h_euc; $s =~ s/($re_euc_c|$re_euc_kana)/$z2h_euc{$1} ? ($n++, $z2h_euc{$1}) : $1/geo; $n; } sub z2h_sjis { local(*s, $n) = @_; &init_z2h_sjis if !%z2h_sjis; $s =~ s/($re_sjis_c)/$z2h_sjis{$1} ? ($n++, $z2h_sjis{$1}) : $1/geo; $n; }
とりあえず,これでエラーは吐き出されなくなった。まあ,それまで問題なく動作していたのだから,わざわざ修正する必要もなかったのかも知れないが……
プラグイン
実につまらないこの記事を投稿したのは,上で見たように,ソースコードをハイライトするプラグインを試してみたかったからだ。Enlighter というプラグインである。
プラグインは,WordPress の管理者ページでただ検索してクリックすればインストールできるわけだから,その作業自体は至って簡単だ。ところが,組み込んだ後,上記のソースコードで試したところ,全く機能せず,ただの TXT モードになったままだった。
勿論,こういうときには,ネット検索で同様の問題の解決事例を隈なく探すわけだが,どれも他のプラグインとの干渉について触れているものの,当サイトの環境とは全く関係がなかった。本当に困った。
例えば,当サイトでは WordPress のテーマ Cocoon を使用しているが,管理者ページから Cocoon の設定項目「高速化」を開き, 「JavaScript縮小化」のオプションをチェックした上で,この機能を除外するファイルとして EnlighterJS.min.js と mootools-core-yc.js を記述してやると,正常に Enlighter が機能するようになったという報告がある。
しかし,これを設定してやっても状況は変わらなかった。それでも,根気強く調べ続けるということが大切だ。すると,世の中には本当に頭が良いというか,冴えている人というのはいるもので,根本的な原因を特定し解決策を呈示してくれている。
それによると,更に上記の箇所にキャッシュのパス /plugins/enlighter/cache を記述すればいいという。それで解決した。しかも,これを見出した当人は,「こんな簡単なことには,もう少し早く気付くべきだった」風の物言いだ。
ちなみに,この投稿では上の「リンクカード」を表示するためのプラグイン Pz-LinkCard の設置試験も行った。というわけで,プログラム修正の話題かと思いきや,単にプラグイン組み込み試験の報告記事だったというオチということで。