VISH,Inc.

PHPでpathinfo関数やbasename関数を使用して、全角を含むファイル名を取得しようとすると失敗する事がある

結論

PHP4、PHP5で、全角ファイル名を含むパスに対して
pathinfo関数やbasename関数でファイル名を取得しようとすると失敗する事がある。

※ファイル名の先頭がマルチバイト文字の場合に失敗する。
※文字コードの種類によらない
※OSの種類によらない

これはPHP4、PHP5の仕様なので、別の手段で対応しよう。
PHP :: Bug #37738 :: basename does not work with Japanese

代替案

// 正常な例
$path = 'http://www.example.com/otakara.jpg';
echo basename($path);
$pathinfo = pathinfo($path);
echo $pathinfo['basename'];

// 失敗例
$path = 'http://www.example.com/大変貴重な画像.jpg';
echo basename($path);
$pathinfo = pathinfo($path);
echo $pathinfo['basename'];

// 代替案の一例
echo end(explode('/', $path));
echo end(explode('/', $path));

////
// OUTPUT
//
// otakara.jpg
// otakara.jpg
// .jpg
// .jpg
// 大変貴重な画像.jpg
// 大変貴重な画像.jpg

滝本

blog.vish.co.jp

Leave a Reply


VISH企業サイト
サイトマスター.jp
モバイルサイト制作・構築