PHPUnitでテストしながら実装してみたのでサーバに載せてみたところ、
Wordpressでは予定通りに動作しない。
ローカルでは問題なく動作したんだけれども。。。
# 動作結果の確認
Webサーバに転送してみたところ、うまく動作しない。
空行検出を含む一部の正規表現が、ローカルと違う動作結果を出していた。
原因は、PHPのバージョン違いか、文字コードか、WordPress固有の問題か?
それとも他の原因?
順に確認していこう。
# PHPのバージョン違い
ローカルのPHPは
PHP 5.5.27 (cli) (built: Jul 23 2015 00:21:59)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
サーバは 5.3 だったけれど、 5.5.19 に切り替えてみても、
結果は変わらなかった。
# 文字コード
ローカルでは、UTF-8。
WordPress も標準は UTF-8 のはず。
# WordPress固有の問題? テスト用のサーバでデバッグ
本番WordPressでは怖いので、以前作ったまま放置していた 別の WordPress でテスト。
こっちのサーバは、デバッグ用の設定になっている。
wp-config.php:84
define(‘WP_DEBUG’, true);
すると、3箇所に問題が起きていた。
Notice: Undefined index: text in /home/somof/somof.net/public_html/hawaii/wp-content/plugins/org2html/orgParser.php on line 189
Notice: Undefined index: args in /home/somof/somof.net/public_html/hawaii/wp-content/plugins/org2html/orgParser.php on line 387
Deprecated: Function split() is deprecated in /home/somof/somof.net/public_html/hawaii/wp-content/plugins/org2html/orgParser.php on line 96
暗黙の配列を、暗黙のNULLと仮定していたのを怒られているのと、
splitは廃止せい、という事らしい。
未定義のチェックを追加して、split() を、explode() に交換すると、
警告は無くなった。
# WordPress固有の問題? テスト用のサーバでデバッグ
ローカルに本番環境が無いので、サーバでログを吐かせてみると、
if (“” === $line) {
の行が動いていない事が分かった。
なんてことはない、WordPressの中の改行コードに ‘\r’ が混じっていたので、
‘\r’ を削除するコードを追加して、動作するようになった。
そのうち、サーバ側のPHPを 5.3 に戻しておこう。
# このプラグインを正しく成長させるにはWordPressの探求が必要そう
このプラグインは、要はテキストにHTMLタグを追加するフィルタなのだけど、
WordPress自身もHTMLタグを追加してくるので、
細かいことまで調整しようとすると、厄介。
せっかく、<PRE><CODE>で囲んでも、WordPressが改行に<BR>を追加してくる。
なので、間延びした表示になってしまった。
今回は、プラグイン側で泥縄的に最低限の見栄えまで帳尻を合わせたけども、
本当はちゃんとしないといけないんだろう。
CSSで調整しようにも、余計なタグを挿入されてしまうので、うまくいかない。
WordPress自体には、それ程興味もないしなぁ。