这是一个你可以在网上到处阅读的问题,有各种答案:
$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];
等等
但是,总有"最好的方法",它应该在Stack Overflow上.
来自其他脚本语言的人总是认为他们更好,因为他们有内置的功能而不是PHP(我现在正在看Pythonistas :-)).
事实上,它确实存在,但很少有人知道它.见面pathinfo()
:
$ext = pathinfo($filename, PATHINFO_EXTENSION);
这是快速和内置的.pathinfo()
可以为您提供其他信息,例如规范路径,具体取决于您传递给它的常量.
请记住,如果您希望能够处理非ASCII字符,则需要先设置区域设置.例如:
setlocale(LC_ALL,'en_US.UTF-8');
另外,请注意,这不考虑文件内容或mime类型,您只能获得扩展名.但这就是你要求的.
最后,请注意,这仅适用于文件路径,而不适用于使用PARSE_URL覆盖的URL资源路径.
请享用
pathinfo()
$path_info = pathinfo('/foo/bar/baz.bill'); echo $path_info['extension']; // "bill"
示例网址: 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#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'
注意:只有在手动添加时,服务器端才能使用主题标签.
还有SplFileInfo
:
$file = new SplFileInfo($path); $ext = $file->getExtension();
通常,如果你传递这样一个对象而不是字符串,你可以编写更好的代码,那么你的代码就更多了.从PHP 5.4开始,这是一个单行:
$ext = (new SplFileInfo($path))->getExtension();
E-satisf响应是确定文件扩展名的正确方法.
或者,您可以使用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($_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; }
只要它不包含路径,您也可以使用:
array_pop(explode('.', $fname))
$fname
例如,文件的名称在哪里:my_picture.jpg
结果将是:jpg
1)如果你正在使用(PHP 5> = 5.3.6) 你可以使用SplFileInfo :: getExtension - 获取文件扩展名
示例代码
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
示例代码
这将输出
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 output should be the extension of the file e.g., png, gif, or html
您也可以尝试这样做(它在PHP 5. *和7上有效):
$info = new SplFileInfo('test.zip'); echo $info->getExtension(); // ----- Output -----> zip
提示:如果文件没有扩展名,它将返回一个空字符串
substr($path, strrpos($path, '.') + 1);
这是一个例子。假设$ filename是“ example.txt”,
$ext = substr($filename, strrpos($filename, '.', -1), strlen($filename));
因此$ ext将是“ .txt”。
快速修复将是这样的.
// Exploding the file based on the . 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";