php file_existsを使ってファイルの存在確認を行う

  • 作成日 2020.12.15
  • php
php file_existsを使ってファイルの存在確認を行う

phpで、file_existsを使用して、ファイルの存在確認を行うサンプルコードを記述してます。phpのバージョンは8.0です。

環境

  • OS  CentOS Stream release 8
  • php 8.0.0
  • nginx 1.14.1

file_exists使い方

file_existsを使用すれば、ファイルの存在確認を行うことが可能です。

file_exists( ファイルパス );
// 存在でtrue , なければfalseを返す

以下は、存在するファイル「hoge1.txt」と存在しない「hoge2.txt」の存在確認を行うサンプルコードとなります。

実行するphpは「sample.php」となります。

<?php

echo file_exists('hoge1.txt') ? '存在します' : '存在しません';
// 存在します

echo file_exists('hoge2.txt') ? '存在します' : '存在しません';
// 存在しません

ディレクトリの存在確認も可能です。

<?php

echo file_exists('hoge1') ? '存在します' : '存在しません';
// 存在します

echo file_exists('hoge2') ? '存在します' : '存在しません';
// 存在しません

is_dir使用

ディレクトリの存在確認であれば、is_dirも使用可能です。
※is_dirは、ディレクトリの存在確認のみです。

is_dir( ディレクトリパス );
// ディレクトリであればtrue , ディレクトリでなければfalseを返す

is_dirサンプルコード

<?php

echo is_dir('hoge1') ? '存在します' : '存在しません';
// 存在します

echo is_dir('hoge2') ? '存在します' : '存在しません';
// 存在しません

ディレクトリの存在確認を行うのであれば、is_dirの方が圧倒的パフォーマンスは、いいです。

【参考】 is_dirとfile_existsをそれぞれ1000万回実行した結果

測定結果 : is_dir
process time: 3.06589 ミリ秒

測定結果 : file_exists
process time: 12.79168 ミリ秒

stream_resolve_include_path使用

stream_resolve_include_pathを使用すること可能です。

stream_resolve_include_path( ファイルパス )
// 存在すればファイル名を含む文字列を、存在しなければfalseを返す
<?php

echo stream_resolve_include_path('hoge1.txt') ? '存在します' : '存在しません';
// 存在します

echo stream_resolve_include_path('hoge1.txt');
// /usr/share/nginx/html/hoge1.txt

echo stream_resolve_include_path('hoge2.txt') ? '存在します' : '存在しません';
// 存在しません

echo stream_resolve_include_path('hoge1') ? '存在します' : '存在しません';
// 存在します

echo stream_resolve_include_path('hoge1');
// /usr/share/nginx/html/hoge1

echo stream_resolve_include_path('hoge2') ? '存在します' : '存在しません';
// 存在しません

パフォーマンスは、ファイルが存在する場合は、stream_resolve_include_pathの方が良さそうですが、存在しない場合はfile_existsの方が良さそうです。

【参考】 stream_resolve_include_pathとfile_existsを1000万回実行した結果

ファイルが存在する場合

測定結果 : stream_resolve_include_path
process time: 12.70412 ミリ秒

測定結果 : file_exists
process time: 12.96479 ミリ秒

ファイルが存在しない場合

測定結果 : stream_resolve_include_path
process time: 69.48698 ミリ秒

測定結果 : file_exists
process time: 12.22266 ミリ秒