他の人のコードから学ぼうとすると、拡張子からファイル名を削除する方法がたくさんありますが、特定の条件を想定しているため、ほとんどの方法はローカライズされすぎているようです。例えば :
これは、3文字の拡張子(、、など)のみを想定して.txt
い.jpg
ます.pdf
。
substr($fileName, 0, -4);
また
substr($fileName, 0, strrpos($fileName, '.'));
.jpeg
ただし、これにより、、などのファイル名で問題が発生する可能性があります.tiff
.html
。.js
またはまたはのように2つだけ.pl
(このリストを参照すると、一部のファイル名は1文字しか使用できず、10(!)までのファイル名もあります)
私が見た他のいくつかの方法は、ポイントに依存しています(.
)
例えば :
return key(explode(“.”, $filename));
次のようなファイル名で問題を引き起こす可能性があります20121029.my.file.name.txt.jpg
こっちも一緒 :
return preg_replace('/\.[^.]*$/', '', $filename);
pathinfo($file)
and / orを 使用する人もいますbasename()
(常に安全ですか??)
basename($filename);
そして他の多くの方法..
だから私の質問にはいくつかの部分があります:
ファイル拡張子を「取り除く」ための最良の方法は何ですか?(要点あり)
ファイル拡張子を(ポイントなしで)「取得」および/またはチェックするための最良の方法は何ですか
php独自の関数(basename)は、それらがどれほどエキゾチックであるか、またはファイル名がどのように構築されるかに関係なく、すべての拡張機能を認識しますか?
OSが問題に影響を与えた場合はどうなりますか?(win、linux、unix ...)
- 私が答えたいと思うすべての小さなサブ質問は、全体的な単一の質問にまとめることができます: 防弾、全体的、常に機能する、失敗しない、ベストプラクティス、über_functionすべての条件で動作しますか?
編集I-別のファイル拡張子リスト