事象の水平線

個人的ブックマーク代わりなメモ書きブログ。 地球は丸いよ。↓このへん。

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PageTop
録画は最後まで実行されるのだけれど、出来上がったファイルのファイルネームが途中で切れていて動作ログでもエラーが出る。

recomplete:: 予約ID636:BS151世界の名画ベストセレクション ルノワール イレーヌ カーン ダンヴェール嬢の録画に失敗した模様

こんな感じ。出来上がったファイルは拡張子もついてないので真っ白アイコンになってしまう。
すごく稀なんだけれど、何度か経験している。
で、mysqlから

# mysql -u username -p
Enter password:
mysql> use PT3;
mysql> SELECT * FROM Recorder_reserveTbl ORDER by starttime ;


して、予約テーブルを見てみると、ファイルネームになるフィールドの“path”にどうも半角スペースが入っている気がする。

で、ソースを眺めてみると、Reservation.class.phpの240行目付近で
保存するファイルネームに対して、mb_ereg_replaceで『 』『.』『/』『*』『:』『<』『>』『?』『\』『|』『(』『)』『'』『"』『&』(全部半角)をすべて『_』に変換している。

// あると面倒くさそうな文字を全部_に
//$filename = preg_replace("/[ \.\/\*:<>\?\\|()\'\"&]/u","_", trim($filename) );

// preg_replaceがUTF-8に対応できない環境があるようなのでmb_ereg_replaceに戻す
$filename = mb_ereg_replace("[ \./\*:<>\?\\|()\'\"&]","_", trim($filename) );

おそらく、コマンドで引数を渡すときに半角スペースが入っていると、そこで分断されて別の引数として渡されるからだろうし、同様にWindowsなどでファイルネームに使えない文字もすべて回避してるのだろう。
で、本来ならこれで半角スペースもすべてアンダーバーになるのだろうけど、何故かならない場合があるみたい。
調べてみると、
mb_regex_encoding ('UTF-8');
を入れるといいらしい。ので、入れたらうまく行ってるみたいです。

で、最終的にはこんな感じ。
mb_regex_encoding ('UTF-8');
$filename = mb_ereg_replace("[\./\*:<>\?\\|()\'\"&]","_", trim($filename) );
$filename = mb_ereg_replace(" "," ", $filename );
$filename = mb_ereg_replace(" +"," ", $filename );

半角スペースだけ全角スペースにして、連続する全角スペースはひとつに。


自分はファイルネーム規則で録画時間を一番最後(番組タイトルの後)に入れていたので、シリーズものの予約録画の際に、ファイルネームがタイトルの途中で切れてしまって(録画時間も入っていないので)、1話目の録画終了後、2話目が全く同じファイルネームで録画開始されて、1話目に上書きしてしまうという致命的な事態に陥った。
(結局10話完結ものが最後の10話目しか取れていないという・・・)

結構シリアスなバグっぽいのにそのままなのは、単に環境依存の問題で、自分の環境だけなのかもしれません・・


ちなみに、環境は
# php -version
PHP 5.3.3 (cli) (built: Jul 3 2012 16:53:21)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

スポンサーサイト

PageTop

コメント

 ※
 ※
管理者にだけ表示を許可する
  ※ 必須項目です

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。