わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

PHPでsvn commitできない?

久しぶりに,PHPのコードをいじりました.
自作のWebアプリケーションで,特定用途のテキストファイルを参照したり,変更したりできるようにしています.変更したら即コミットをします.バージョン管理にはSubversionを用いています.
それで,コミットをするために

$command = "svn commit -m \"$comment\" $filename";
system("$command > /dev/null");

とすると,コミットがうまくいくときといかないときがありました.あれこれ実行したところ,$commentが持つ文字列の中に,日本語文字が含まれていれば,ダメらしいと分かってきました.
ファイルにとってみますか.

$command = "svn commit -m \"$comment\" $filename";
$logfile = "/tmp/logfile.txt";
system("date >> $logfile");
system("echo \"$command\"  >> $logfile");
system("$command >> $logfile 2>&1");

それで,また何度か実行してから,/tmp/logfile.txtを見てみると,echoコマンドで$commandの中身を出力してみた際に,文字化けが発生しています.つまりsvn実行以前の問題です.これについては,最初の$commentへの代入の直後に

$comment= mb_convert_encoding($comment, "UTF-8", "auto");

を書くことで解決しました.
しかしそれでも,svn commitはうまくいきません.エラーメッセージの最初2行は

svn: Commit failed (details follow):
svn: Can't convert string from native encoding to 'UTF-8':

とあって,あ,これは環境変数を設定すればいいんじゃないかと気づき,コミットのコマンドを

$command = "env LANG=ja_JP.UTF-8 /usr/bin/svn commit -m \"$comment\" $filename";

に変更すると,うまくコミットでき,ログファイルにも文字化けされていない日本語メッセージが追記されるようになりました.
そもそもsystemで実行するのは奥の手のはずです.少し調べると,http://www.php.net/manual/ja/book.svn.phpというページを見つけました.要インストールなので,今のサーバですぐに使えそうにないのですが,システムのアップグレードの際には,これを使えるよう検討したいものです.