-1

重複の可能性:
PHPでファイル拡張子を抽出する方法は?
ファイル拡張子(ベース名?)を取得します

他の人のコードから学ぼうとすると、拡張子からファイル名を削除する方法がたくさんありますが、特定の条件を想定しているため、ほとんどの方法はローカライズされすぎているようです。例えば ​​:

これは、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-別のファイル拡張子リスト

4

1 に答える 1

3

重複する質問のトップアンサーからの引用:

$ext = pathinfo($filename, PATHINFO_EXTENSION);

これが最善の方法です。それはオペレーティングシステムによって提供され、あなたができる最善のことです。うまくいかないケースはありません。

1つの例外は、を含むファイル拡張子です.。しかし、正気の人はそのようなファイル拡張子を導入しません。なぜなら、それはどこでも壊れ、さらに暗黙の慣習を破るからです。

たとえば、ファイル20121021.my.file.name.txt.tar.gzでは、拡張機能tar.gzになります。

いいえ、それははるかに簡単です-そして多分それはあなたの心配の根源です。の拡張子は20121021.my.file.name.txt.tar.gzです.gz.gzこれは、すべての目的と目的のためのgzipファイルです。解凍して初めて.tarファイルになります。それまでは.tar、ファイル名のは意味がなく、ツールの情報としてのみ機能しgunzipます。。という名前のファイル拡張子はありません.tar.gz

とはいえ、ファイル拡張子を検出しても、ファイルが実際に主張するタイプであるかどうかを判断するのに役立ちません。しかし、あなたはそれを知っていると確信しています。将来の読者のためにこれをここに置いてください。

于 2012-10-29T00:54:04.037 に答える