2021-12-23に更新

PHPで大文字小文字を区別しないファイル有無チェックを行う

PHP

PHPのfile_existsは大文字小文字の区別があります。そのため大文字小文字を区別せずにファイルの存在をチェックすることができません。

globでファイル一覧を取ってから調べる、という方法もありますが、フォルダ内の画像数が多い場合には危険です。

ただ、globだと [aA] のようにしてどちらかの文字にマッチする、という条件での検索を行うことができますのでこれを利用することで大文字小文字の区別を行わずにファイルの有無をチェックすることができます。

例えば test.png というファイルを探したい場合は [tT][eE][sS][tT].[pP][nN][gG] で検索すれば良いわけです。

下記のような関数になります。

function ignoreCaseFileExists(string $fileName)
{
    $upper = strtoupper($fileName);
    $lower = strtolower($fileName);
    $searchFileName = '';
    $length = strlen($fileName);
    for ($i = 0; $i < $length; $i++) {
        if ($upper[$i] === $lower[$i]) {
            $searchFileName .= $upper[$i];
        } else {
            $searchFileName .= "[{$upper[$i]}{$lower[$i]}]";
        }
    }

    $found = glob($fileName);
    if ($found) {
        return $found[0]
    }
    return null;
}
  • ファイル名だけ検索しているのでフォルダも含める場合は適宜要改造です
  • globで使用する特殊な文字が含まれるファイルは処理できません
ツイッターでシェア
みんなに共有、忘れないようにメモ

だら@Crieit開発者

Crieitの開発者です。 Webエンジニアです(在宅)。大体10年ちょい。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel, React, Flutter, Vue.js, Node, RoR 趣味:Elixir, Phoenix, Nuxt, Express, GCP, AWS等色々 PHPフレームワークちいたんの作者

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント