PHP 中获取文件扩展名的正确方法

在 PHP 中,如何获取文件扩展名名呢,我们可能会用字符串操作函数进行处理,但下面举的这些方法只是获取了用户的名字后面带.后面的后缀了并不能做安全验证.

比如如下代码:echo substr(strrchr($file_name,'.'),1);

或者如下代码:echo end(explode(".", $filename));

最正确的方法应该是使用 pathinfo 函数,如:

echo pathinfo($filename, PATHINFO_EXTENSION);

pathinfo 函数支持4种类型的返回:

PATHINFO_DIRNAME – 目录

PATHINFO_BASENAME – 文件名(含扩展名)

PATHINFO_EXTENSION – 扩展名

PATHINFO_FILENAME – 文件名(不含扩展名)

例子代码如下:

  1. function get_extension($filename){
  2. return pathinfo($filename,PATHINFO_EXTENSION);
  3. }
  4. //调用代码如下
  5. <?php
  6. print_r(pathinfo("/testweb/test.txt"));
  7. ?>
  8. //以上将输出如下结果:
  9. Array(
  10. [dirname] => /testweb
  11. [basename] => test.txt
  12. [extension] => txt
  13. )

如果要上传的用户最好要加以下面方法处理:

$extension=$upfile['type']; //这个是由upload上传过来的文件信息,代码如下:

  1. switch( $extension )
  2. {
  3. case 'application/msword':
  4. $extension ='doc';
  5. break;
  6. case 'application/vnd.ms-excel':
  7. $extension ='xls';
  8. break;
  9. case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':
  10. $extension ='docx';
  11. break;
  12. case 'application/vnd.ms-powerpoint':
  13. $extension ='ppt';
  14. break;
  15. case 'application/pdf':
  16. $extension ='pdf';
  17. break;
  18. case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
  19. $extension ='xlsx';
  20. break;
  21. default:
  22. die('只允许上传doc,docx,xls,pdf,ppt文件 <a href="wend.php">重新上传</a>');
  23. }