【PHP】日本語ファイルも対応!pathinfo()でファイル名を取得する方法
何かしらのWebシステムを作る際、ユーザーがアップロードしたファイル名が必要になる場面はよくあります。
そんな時にPHPに用意されているpathinfo()関数を使うことで簡単にファイル名を取得することが出来ます。
この記事ではその方法や日本語ファイルを取得する際の注意点をご紹介したいと思います。
pathinfo()でファイル名を取得する
PHPの標準関数のpathinfo()関数を使うことでファイル名を取得することが出来ます。
pathinfo()関数の基本的な使い方はこちらです。
$file = "https://irodori-design-web.com/blog_image/3438/3438-1.jpg";
echo "<pre>";
var_dump(pathinfo($file));
echo "</pre>";
// array(4) {
// ["dirname"]=>
// string(46) "https://irodori-design-web.com/blog_image/3438"
// ["basename"]=>
// string(10) "3438-1.jpg"
// ["extension"]=>
// string(3) "jpg"
// ["filename"]=>
// string(6) "3438-1"
// }
このように「dirname」「basename」「extension」「filename」と、4つの配列形式で値を返します。
ファイル名を取得したい場合は以下のように指定します。
$file = "https://irodori-design-web.com/blog_image/3438/3438-1.jpg";
$file = pathinfo($file);
echo $file['basename'];
// 3438-1.jpg
拡張子を除いたファイル名を取得したい場合は以下のように指定します。
$file = "https://irodori-design-web.com/blog_image/3438/3438-1.jpg";
$file = pathinfo($file);
echo $file['filename'];
// 3438-1
引数を指定
pathinfo()関数には第二引数を指定してピンポイントに「dirname」「basename」「extension」「filename」の値を取得することも出来ます。
$file = "https://irodori-design-web.com/blog_image/3438/3438-1.jpg";
echo "<pre>";
var_dump(pathinfo($file, PATHINFO_DIRNAME));
echo "</pre>";
// string(46) "https://irodori-design-web.com/blog_image/3438"
例えば、第二引数に「PATHINFO_DIRNAME」を指定することでファイルの格納されているディレクトリ名を取得出来ます。
その他の引数を含めて全て見ていきましょう。
$file = "https://irodori-design-web.com/blog_image/3438/3438-1.jpg";
// ディレクトリ名を取得
echo "<pre>";
var_dump(pathinfo($file, PATHINFO_DIRNAME));
echo "</pre>";
// string(46) "https://irodori-design-web.com/blog_image/3438"
// ファイル名を取得
echo "<pre>";
var_dump(pathinfo($file, PATHINFO_BASENAME));
echo "</pre>";
// string(10) "3438-1.jpg"
// ファイル名を取得(拡張子を除く)
echo "<pre>";
var_dump(pathinfo($file, PATHINFO_FILENAME));
echo "</pre>";
// string(6) "3438-1"
// 拡張子を所得
echo "<pre>";
var_dump(pathinfo($file, PATHINFO_EXTENSION));
echo "</pre>";
// string(3) "jpg"
日本語ファイル名を正しく取得する方法
ファイル名は基本的に日本語は推奨されていませんが、中には日本語ファイル名がアップされることも想定されます。
そのような場合、pathinfo()関数を使うだけでは日本語(全角文字)を除いた値が取得されてしまうことがあります。
そこで最初に以下のように指定を追加することで日本語も正しく取得することが出来ます。
setlocale(LC_ALL, 'ja_JP.UTF-8');
$file = "https://irodori-design-web.com/blog_image/3438/日本語ファイル.jpg";
echo "<pre>";
var_dump(pathinfo($file));
echo "</pre>";
// array(4) {
// ["dirname"]=>
// string(46) "https://irodori-design-web.com/blog_image/3438"
// ["basename"]=>
// string(25) "日本語ファイル.jpg"
// ["extension"]=>
// string(3) "jpg"
// ["filename"]=>
// string(21) "日本語ファイル"
// }
まとめ
いかがでしたか?
PHPのpathinfo()関数を使うだけで簡単にファイル名を取得することが出来ます。
この関数の存在を知らなければ、パスを取得して、/(スラッシュ)で分割して、さらに.(ドット)で分割しないといけません。
また、ファイル名が必要ということであれば、pathinfo($file, PATHINFO_BASENAME)だけでいいと思います。
便利な関数なので是非ファイル名を取得したい時は使ってみて下さい。











