PHP5 再び

昨日のHardy再インストールに続いて、昨年失敗したPHP5に再チャレンジ。

まずは、以下のようなエラーハンドラ関数を実装してエラーが発生してないかどうか確認。

// エラーハンドラ関数
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
switch ($errno) {
case E_USER_ERROR:
echo "My ERROR [$errno] $errstr
\n";
echo " Fatal error on line $errline in file $errfile";
echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")
\n";
echo "Aborting...
\n";
exit(1);
break;

case E_USER_WARNING:
echo "$errfile($errline): My WARNING [$errno] $errstr
\n";
break;

case E_USER_NOTICE:
echo "$errfile($errline): My NOTICE [$errno] $errstr
\n";
break;

case E_WARNING:
echo "$errfile($errline): WARNING [$errno] $errstr
\n";
break;

case E_NOTICE:
echo "$errfile($errline): NOTICE [$errno] $errstr
\n";
break;

default:
echo "$errfile($errline): Unknown error type: [$errno] $errstr
\n";
break;
}

// PHP の内部エラーハンドラを実行しません
return true;
}

// 定義したエラーハンドラを設定する
$old_error_handler = set_error_handler("myErrorHandler");
したところ、
NOTICE [8] Use of undefined constant RNOTE_VERSION - assumed 'RNOTE_VERSION'
という行が怒濤のように表示された。

何だこれ?と思って調べてみると、

スクリプト中にクォート(シングルクォート、ダブルクォート)で囲われていないキーワードがあった場合、PHP 3およびPHP 4ではこれをクォートで囲った文字列として認識していた
という事なので、
define(RNOTE_VERSION,'0.9.7.5');
define('RNOTE_VERSION','0.9.7.5');
という風にすべく、えいや!
$ sed "s/define(\([^,]*\)\(,.*\)$/define(\'\1\'\2/" rnote.php4 > rnote.php
っと変換したところ、NOTICEは出なくなったものの、昨年同様にうまく展開されない記事がある。割合的には26件と多少増えているものの、傾向は同じなので上記NOTICEの対処は関係無かった模様。

ていうか、どうもGoogle マップの航跡ログを含んでいるエントリの一部が失敗しているような気がして、試しに航跡ログを削除してみたらうまく処理できた。

というわけで、次はのスクリプト展開部分を調べてみる事にしよう。

【参照】
●rNote http://rinn.e-site.jp/rnote/
●PHP: Hypertext Preprocessor http://www.php.net/
●Google Maps/Earth活用ツール『轍 Wadachi』 http://www.cyclekikou.net/modules/wadachi/
●ゼンド・ジャパン株式会社 http://www.zend.co.jp/
Tips/PHP/PHP5へのポーティング