[雑記] Pitchfork を試す
出先で好きな曲をいつでも再生できるように,ということで,Icecast+MPD+Pitchfork を導入しました.
Icecast と MPD の導入手順は他のサイトに任せてここでは省略します.ただし,Pitchfork だけは多少手を加えましたので,説明します.
手を加えるのは basename 関数の置き換えです.既にご存知の方もいらっしゃるでしょうが,PHP の basename 関数には,ファイル名の先頭が 8 ビットの文字の場合に誤動作する問題 (PHP Bugs: #29542)があります.
PHP Bugs: #29542 のレスポンスによれば,PHP 5.0.1 では修正されていたということらしいのですが,私の環境 (PHP 5.1.6) で,以下の PHP ファイル (ファイルのエンコーディングは EUC-JP) を使って実際に試してみると,ファイル名の先頭が 8 ビット文字の場合に正しく動作しませんでした.
<?php
echo basename("dir/theファイル.txt"); echo <br>; // 結果: theファイル.txt (正しい)
echo basename("dir/ファイル1.txt"); echo <br>; // 結果: 1.txt (間違い)
echo basename("dir/ファイル.txt"); echo <br>; // 結果: .txt (間違い)
echo basename("dir/file.txt"); // 結果: file.txt (正しい)
?>
類似した別のバグ報告 (PHP Bugs #37738) によれば,Won't fix in PHP 5. This will be implemented for PHP 6.
ということですので,私は以下のように,strrpos による basename の代替関数を適当に作りました.
function basename2($filename) {
$pos = @strrpos($filename, "/");
if ($pos === false)
return $filename;
return @substr($filename, $pos + 1);
}
あとは Pitchfork/player/metadata.php と Pitchfork/player/metadata_cover.php 内の basename() を basename2() の呼び出しに置き換えればとりあえず動きました.
トラックバック
トラックバック URI: https://www.pakunet.jp/hoge/trackback/2007031201
トラックバックはありません.