如何在PHP中提取文件扩展名?
这是一个问题,你可以在网上随处阅读各种答案:
$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]; 等等
然而,总是有“最好的方法”,它应该在stackoverflow上。
其他脚本语言的人总是认为他们更好,因为他们有一个内置的函数来做到这一点,而不是PHP(我正在看pythonistas :-))。
 事实上,它确实存在,但很less有人知道。 符合pathinfo() : 
 $ext = pathinfo($filename, PATHINFO_EXTENSION); 
 这是快速和内置的。  pathinfo()可以为您提供其他信息,例如规范path,具体取决于您传递给它的常量。 
请记住,如果您希望能够处理非ASCII字符,则需要先设置区域设置。 例如:
 setlocale(LC_ALL,'en_US.UTF-8'); 
另外请注意这不考虑文件内容或mimetype,你只能得到扩展名。 但这是你要求的。
最后,请注意,这仅适用于文件path,而不适用于使用PARSE_URL覆盖的URL资源path。
请享用
PATHINFO()
一个例子…
 $path_info = pathinfo('/foo/bar/baz.bill'); echo $path_info['extension']; // "bill" 
 忘记PATHINFO ,更安全的是: PARSE_URL 
 例如,url是http://example.com/myfolder/sympony.mp3?a=1&b=2#XYZ 
PATHINFO给出:
 $x = pathinfo($url); $x['dirname'] 🡺 'http://example.com/myfolder' $x['basename'] 🡺 'sympony.mp3?a=1&b=2' // <------- BAD !! $x['extension'] 🡺 'mp3?a=1&b=2' // <------- 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']🡺 '' //<----- this outputs hashtag "XYZ" only in case, when the link containing that hashtag was manually passed to function, because automatically, hashtags are not automatically detectable by PHP 
增加 :
 dirname(parse_url($url)['path']) 🡺 /myfolder basename(parse_url($url)) 🡺 sympony.mp3 pathinfo(parse_url($url)['path'], PATHINFO_EXTENSION) 🡺 mp3 
 注意,Hashtag部分url(即#smth )在PHP请求中不可用,但只能用于javascript。 
 还有SplFileInfo : 
 $file = new SplFileInfo($path); $ext = $file->getExtension(); 
通常你可以编写更好的代码,如果你传递这样一个对象而不是一个string,那么你的代码更多的是在说话。 从PHP 5.4开始,这是一个单行的:
 $ext = (new SplFileInfo($path))->getExtension(); 
E-satis响应是确定文件扩展名的正确方法。
或者,也可以不使用文件扩展名,而使用fileinfo( http://us2.php.net/fileinfo )来确定文件的MIMEtypes。
以下是处理用户上传的图像的简单示例:
 // 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($_FILES['image']['tmp_name'], FILEINFO_MIME)) { case 'image/jpg': $im = imagecreatefromjpeg($_FILES['image']['tmp_name']); break; case 'image/png': $im = imagecreatefrompng($_FILES['image']['tmp_name']); break; case 'image/gif': $im = imagecreatefromgif($_FILES['image']['tmp_name']); break; } 
1)如果你正在使用(PHP 5> = 5.3.6),你可以使用SplFileInfo :: getExtension – 获取文件扩展名
示例代码
 <?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> = 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); ?> 
这将输出
 string(3) "png" string(2) "gz" 
//编辑:删除了一个括号
 有时不要使用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 
只要它不包含path,你也可以使用:
 array_pop(explode('.',$fname)) 
 其中$fname是文件的名称,例如: my_picture.jpg结果将是: jpg 
 substr($path, strrpos($path, '.') + 1); 
这里是一个例子,假设$ filename是“example.txt”
 $ext = substr($filename,strrpos($filename,'.',-1),strlen($filename)); 
所以$ ext将是“.txt”
快速解决将是这样的。
  //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]; 
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"; 
这将工作
 $ext = pathinfo($filename, PATHINFO_EXTENSION); 
 我发现pathinfo()和SplFileInfo解决scheme适用于本地文件系统上的标准文件,但是如果您使用远程文件作为URL,则可能会遇到困难,因为有效映像的URL可能具有# (片段标识符)和/还是?  (查询参数),这两个解决scheme将(不正确)视为文件扩展名的一部分。 
 我发现这是一个可靠的方法来使用pathinfo()后的第一个parsing它去除文件扩展名后的不必要的混乱: 
 $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);  ? 这是所有比较最快的方法。  @Kurt钟已经回答了。 
我们来看看比较结果: 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, '.'),'.'); 
 你也可以试试这个 
  (在PHP 5 *和7上工作) 
 $info = new SplFileInfo('test.zip'); echo $info->getExtension(); // ----- Output -----> zip 
 提示:如果文件没有扩展名,它将返回一个空string 
 好好享受 ;) 
使用
 str_replace('.', '', strrchr($file_name, '.')) 
为快速扩展检索(如果您确定您的文件名有一个)。