2011-09-27 124 views
33

我有一个上传脚本,我需要检查文件扩展名,然后根据该文件扩展名运行单独的函数。有人知道我应该使用什么代码吗?PHP检查文件扩展名

if (FILE EXTENSION == ???) 
{ 
FUNCTION1 
} 
else if 
{ 
FUNCTION2 
} 
+0

可能重复[如何在PHP中提取文件扩展名?](http://stackoverflow.com/questions/173868/how-to-extract-a-file-extension-in-php) –

回答

78

pathinfo是你在找什么

PHP.net

$file_parts = pathinfo($filename); 

switch($file_parts['extension']) 
{ 
    case "jpg": 
    break; 

    case "exe": 
    break; 

    case "": // Handle file extension for files ending in '.' 
    case NULL: // Handle no file extension 
    break; 
} 
+1

什么是没有扩展的情况? case NULL?案件 ””? – swl1020

+2

已更新。空字符串'“”'用于文件,然后以'.'结尾。 NULL表示没有文件扩展名。您可以打破案例陈述,但是对于这个例子,我只是将它们组合在一起。 – Brombomb

14
$info = pathinfo($pathtofile); 
if ($info["extension"] == "jpg") { .... } 
+0

我在我的网站上使用了这段代码。但是,当它与'echo“$ info”'一起执行时,它总是返回值Array。为什么是这样? –

+0

@ user2910074这个问题是旧的,我会让你看到你的代码,以提供任何帮助。我建议你在SO –

-1
$original_str="this . is . to . find"; 
    echo "<br/> Position: ". $pos=strrpos($original_str, "."); 
    $len=strlen($original_str); 
    if($pos >= 0) 
    { 
    echo "<br/> Extension: ". substr($original_str,$pos+1,$len-$pos) ; 
    } 
+0

@jurchiks这里发布一个问题。是。至 。在大多数操作系统中,find'绝对是一个有效的文件名。 – meagar

+0

谢谢@meagar。感谢您的有效评论。 – Jasmeen

2
$file_parts = pathinfo($filename); 

$file_parts['extension']; 
$cool_extensions = Array('jpg','png'); 

if (in_array($file_parts['extension'], $cool_extensions)){ 
    FUNCTION1 
} else { 
    FUNCTION2 
} 
0

为PHP 5.3+可以使用SplFileInfo()

$spl = new SplFileInfo($filename); 
print_r($spl->getExtension()); //gives extension 

此外,由于要检查扩展名的文件上传,我强烈建议使用MIME类型,而不是..

对于PHP 5.3+使用finfo类的

$finfo = new finfo(FILEINFO_MIME); 
print_r($finfo->buffer(file_get_contents($file name));