使用環境
1.4.7から「グローバル変数($update_exec)ではなく定数(PKWK_UPDATE_EXEC) を使用します。」とあったので、サンプルを手本にmknmzを定義したのですが、いつまで待ってもNamazuのインデックスが更新されません。 不思議に思い仕組みを追うと、lib/file.phpでUNIX固有のコーディングがされていました。
// Command execution per update if (defined('PKWK_UPDATE_EXEC') && PKWK_UPDATE_EXEC) system(PKWK_UPDATE_EXEC . ' > /dev/null &');
"> /dev/null"は不当メッセージの削除とsystem()の戻り高速化、"&"はバックグラウンド実行による戻り高速化として追加しているのだと思います。
ただ、Windowsには基本的に/devディレクトリはないので、この部分がエラーになって、PKWK_UPDATE_EXECが実行されないようです。
で、お願いなのですが、/dev/nullがないようなプラットフォームでは、次のような感じでコマンドの出力を捨てるように、どこかのタイミングで変更して頂けると幸いです。
(バックグラウンド実行の共通化は難しそうなので、利用者がガンバレの方向で...)
lib/file.php
// Command execution per update if (defined('PKWK_UPDATE_EXEC') && PKWK_UPDATE_EXEC) { if(!strcmp(filetype('/dev/null'),'char')) system(PKWK_UPDATE_EXEC . ' > /dev/null &'); else exec(PKWK_UPDATE_EXEC); }
プログラムがこの関数で始まる場合、 バックグラウンドで処理を続けさせるには、 プログラムの出力をファイルや別の出力ストリームにリダイレクトする必要があります。 そうしないと、プログラムが実行を終えるまで PHP はハングしてしまいます。