PHPでファイル拡張子を取得(抽出)するにはどうすればよいですか?
-
05-07-2019 - |
質問
これは、ウェブ上のあらゆる場所でさまざまな回答を読むことができる質問です。
$ext = end(explode('.', $filename));
$ext = substr(strrchr($filename, '.'), 1);
$ext = substr($filename, strrpos($filename, '.') + 1);
$ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $filename);
$exts = split("[/\\.]", $filename);
$n = count($exts)-1;
$ext = $exts[$n];
etc。
ただし、「最善の方法」は常に存在します。 Stack Overflowにあるはずです。
解決
他のスクリプト言語の人々は、PHPではなく組み込み関数を持っているため、常に自分の方が優れていると考えています(私は現在Pythonistaを見ています:-))。
実際には存在しますが、それを知っている人はほとんどいません。 pathinfo()
を満たす:
$ext = pathinfo($filename, PATHINFO_EXTENSION);
これは高速で組み込みです。 pathinfo()
は、渡す定数に応じて、正規パスなどの他の情報を提供できます。
非ASCII文字を処理できるようにするには、最初にロケールを設定する必要があることに注意してください。 E.G:
setlocale(LC_ALL,'en_US.UTF-8');
また、これはファイルの内容やMIMEタイプを考慮していないことに注意してください。拡張子のみを取得します。しかし、それはあなたが求めたものです。
最後に、これは、PARSE_URLを使用してカバーされるURLリソースパスではなく、ファイルパスに対してのみ機能することに注意してください。
楽しむ
他のヒント
$path_info = pathinfo('/foo/bar/baz.bill');
echo $path_info['extension']; // "bill"
サンプルURL: http://example.com/myfolder/sympony.mp3?a=1&b=2#XYZ
URLには、 を使用しないでください。 PATHINFO
:
$x = pathinfo($url);
$x['dirname'] 🡺 'http://example.com/myfolder'
$x['basename'] 🡺 'sympony.mp3?a=1&b=2#XYZ' // <------- BAD !!
$x['extension'] 🡺 'mp3?a=1&b=2#XYZ' // <------- BAD !!
$x['filename'] 🡺 'sympony'
PARSE_URL 代わりに:
$x = parse_url($url);
$x['scheme'] 🡺 'http'
$x['host'] 🡺 'example.com'
$x['path'] 🡺 '/myfolder/sympony.mp3'
$x['query'] 🡺 'aa=1&bb=2'
$x['fragment']🡺 'XYZ'
注:手動で追加された場合のみ、ハッシュタグはサーバー側では使用できません。
すべてのネイティブPHPの例については、フルURLを取得してください。 PHP
SplFileInfo
もあります:
$file = new SplFileInfo($path);
$ext = $file->getExtension();
多くの場合、文字列の代わりにそのようなオブジェクトを渡すと、より良いコードを書くことができます。 PHP 5.4以降、これはワンライナーです:
$ext = (new SplFileInfo($path))->getExtension();
E-satis応答は、ファイル拡張子を判断する正しい方法です。
または、ファイル拡張子に依存する代わりに、fileinfo( http://us2.phpを使用することもできます。 net / fileinfo )を使用して、ファイルのMIMEタイプを判別します。
ユーザーがアップロードした画像を処理する簡単な例を次に示します。
// Code assumes necessary extensions are installed and a successful file upload has already occurred
// Create a FileInfo object
$finfo = new FileInfo(null, '/path/to/magic/file');
// Determine the MIME type of the uploaded file
switch ($finfo->file( E-satis応答は、ファイル拡張子を判断する正しい方法です。
または、ファイル拡張子に依存する代わりに、fileinfo( http://us2.phpを使用することもできます。 net / fileinfo )を使用して、ファイルのMIMEタイプを判別します。
ユーザーがアップロードした画像を処理する簡単な例を次に示します。
<*>FILES['image']['tmp_name'], FILEINFO_MIME)) {
case 'image/jpg':
$im = imagecreatefromjpeg( E-satis応答は、ファイル拡張子を判断する正しい方法です。
または、ファイル拡張子に依存する代わりに、fileinfo( http://us2.phpを使用することもできます。 net / fileinfo )を使用して、ファイルのMIMEタイプを判別します。
ユーザーがアップロードした画像を処理する簡単な例を次に示します。
<*>FILES['image']['tmp_name']);
break;
case 'image/png':
$im = imagecreatefrompng( E-satis応答は、ファイル拡張子を判断する正しい方法です。
または、ファイル拡張子に依存する代わりに、fileinfo( http://us2.phpを使用することもできます。 net / fileinfo )を使用して、ファイルのMIMEタイプを判別します。
ユーザーがアップロードした画像を処理する簡単な例を次に示します。
<*>FILES['image']['tmp_name']);
break;
case 'image/gif':
$im = imagecreatefromgif( E-satis応答は、ファイル拡張子を判断する正しい方法です。
または、ファイル拡張子に依存する代わりに、fileinfo( http://us2.phpを使用することもできます。 net / fileinfo )を使用して、ファイルのMIMEタイプを判別します。
ユーザーがアップロードした画像を処理する簡単な例を次に示します。
<*>FILES['image']['tmp_name']);
break;
}
1) (PHP 5&gt; = 5.3.6)を使用している場合 SplFileInfo :: getExtension &#8212;を使用できます。ファイル拡張子を取得します
サンプルコード
<?php
$info = new SplFileInfo('test.png');
var_dump($info->getExtension());
$info = new SplFileInfo('test.tar.gz');
var_dump($info->getExtension());
?>
これは出力します
string(3) "png"
string(2) "gz"
2) (PHP 4&gt; = 4.0.3、PHP 5)を使用している場合に拡張機能を取得する別の方法は、 pathinfo
サンプルコード
<?php
$ext = pathinfo('test.png', PATHINFO_EXTENSION);
var_dump($ext);
$ext = pathinfo('test.tar.gz', PATHINFO_EXTENSION);
var_dump($ext);
?>
これは出力します
<*>//編集:ブラケットを削除しました
パスが含まれていない限り、以下も使用できます。
array_pop(explode('.',$fname))
$ fname
はファイルの名前です。例: my_picture.jpg
結果は次のようになります。 jpg
pathinfo($ path、PATHINFO_EXTENSION)
を使用しない方が便利な場合があります。例:
$path = '/path/to/file.tar.gz';
echo ltrim(strstr($path, '.'), '.'); // tar.gz
echo pathinfo($path, PATHINFO_EXTENSION); // gz
また、 pathinfo
は、通常は問題ではないが、害を与えない拡張では、一部の非ASCII文字の処理に失敗することに注意してください(通常、出力からそれらを非表示にします)。その警告に注意してください。
PHPでファイル拡張子を取得する最も簡単な方法は、PHP組み込み関数 pathinfoを使用することです。
$file_ext = pathinfo('your_file_name_here', PATHINFO_EXTENSION);
echo ($file_ext); // the out should be extension of file eg:-png, gif, html
substr($path, strrpos($path, '.') + 1);
簡単な修正はこのようなものです。
//exploding the file based on . operator
$file_ext = explode('.',$filename);
//count taken (if more than one . exist; files like abc.fff.2013.pdf
$file_ext_count=count($file_ext);
//minus 1 to make the offset correct
$cnt=$file_ext_count-1;
// the variable will have a value pdf as per the sample file name mentioned above.
$file_extension= $file_ext[$cnt];
例を次に示します。$ filenameが&quot; example.txt&quot;であるとします
$ext = substr($filename,strrpos($filename,'.',-1),strlen($filename));
つまり、$ extは&quot; .txt&quot;になります
pathinfo は配列です。 ディレクトリ名、ファイル名、拡張子などを確認できます
$path_parts = pathinfo('test.png');
echo $path_parts['extension'], "\n";
echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['filename'], "\n";
これも試してみることができます
(PHP 5. *および7で動作します)
$info = new SplFileInfo('test.zip');
echo $info->getExtension(); // ----- Output -----> zip
tip:ファイルに拡張子がない場合は空の文字列を返します
それをお楽しみください;)
これは動作します
$ext = pathinfo($filename, PATHINFO_EXTENSION);
pathinfo()
および SplFileInfo
ソリューションは、ローカルファイルシステム上の標準ファイルでうまく機能することがわかりましたが、使用している場合は問題が発生する可能性があります有効な画像のURLとしてのリモートファイルには、URLの最後に#
(フラグメント識別子)および/または?
(クエリパラメーター)があります。不正確)ファイル拡張子の一部として扱う。
これは、最初に解析した後にURLで pathinfo()
を使用して、ファイル拡張子の後に不要な混乱を取り除く信頼できる方法であることがわかりました:
$url_components = parse_url($url); // First parse the URL
$url_path = $url_components['path']; // Then get the path component
$ext = pathinfo($url_path, PATHINFO_EXTENSION); // Then use pathinfo()
これも試すことができます:
pathinfo(basename( これも試すことができます:
<*>FILES["fileToUpload"]["name"]),PATHINFO_EXTENSION)
substr($ path、strrpos($ path、 '。')+ 1);
を使用しない理由
それはすべての比較の最速の方法です。
@カート・チョンはすでに答えました。
ここで比較結果を確認しましょう: https://eval.in/661574
特定のフォルダーのすべてのファイル拡張子を取得し、特定のファイル拡張子で操作を行うことができます
<?php
$files=glob("abc/*.*");//abc is folder all files inside folder
//print_r($files);
//echo count($files);
for($i=0;$i<count($files);$i++):
$extension = pathinfo($files[$i], PATHINFO_EXTENSION);
$ext[]=$extension;
//do operation for perticular extenstion type
if($extension=='html'){
//do operation
}
endfor;
print_r($ext);
?>
速度を探している場合(ルーターなど)、おそらくすべてをトークン化する必要はありません。他の多くの回答は /root/my.folder/my.css
ltrim(strrchr($PATH, '.'),'.');
「最善の方法」とはいえ、議論の余地がありますが、これはいくつかの理由で最善の方法だと思います:
function getExt($path)
{
$basename = basename($path);
return substr($basename, strlen(explode('.', $basename)[0]) + 1);
}
- 拡張機能の複数の部分で機能します。たとえば、
tar.gz
- 短くて効率的なコード
- ファイル名と完全なパスの両方で動作します
実際、私はそれを探していました。
<?php
$url = 'http://example.com/myfolder/sympony.mp3?a=1&b=2#XYZ';
$tmp = @parse_url($url)['path'];
$ext = pathinfo($tmp, PATHINFO_EXTENSION);
var_dump($ext);
IMOこれは、name.name.name.extのようなファイル名を持っている場合の最良の方法です(butいですが、時々起こります)
$ext = explode( '.', $filename ); //explode the string
$ext_len = count( $ext ) - 1; //count the array -1 (becouse count() starts from 1)
$my_ext = $ext[ $ext_len ]; //get the last entry of the array
echo $my_ext;
使用
str_replace('.', '', strrchr($file_name, '.'))
拡張子をすばやく取得する場合(ファイル名に拡張子があることがわかっている場合)。