如何在PHP中检查正确的文件扩展名?

如何在PHP中检查正确的文件扩展名?,php,file,csv,upload,pathinfo,Php,File,Csv,Upload,Pathinfo,所以基本上,我只是想检查上传文件的正确文件扩展名 我知道,这个问题以前在这里已经被回答过好几次了,尽管我一直在犯同样的错误,而且没有解决方案或建议来解释为什么会发生这种情况 这是我的密码: $file = fopen($_FILES['upload_csv']['tmp_name'], 'r'); $ext = pathinfo($file, PATHINFO_EXTENSION); if($ext != "csv") { $errors[] = "Sorry, but only CS

所以基本上,我只是想检查上传文件的正确文件扩展名

我知道,这个问题以前在这里已经被回答过好几次了,尽管我一直在犯同样的错误,而且没有解决方案或建议来解释为什么会发生这种情况

这是我的密码:

$file = fopen($_FILES['upload_csv']['tmp_name'], 'r');
$ext = pathinfo($file, PATHINFO_EXTENSION);

if($ext != "csv")
{
    $errors[] = "Sorry, but only CSV files are supported";
}
这是我的错误:

Warning: pathinfo() expects parameter 1 to be string
我现在已经尝试了其他3种方法,都是使用
pathinfo()
。尽管如此,仍然显示了完全相同的错误

有人对发生这种情况的原因有什么建议吗?

您的问题在于:

$file = fopen($_FILES['upload_csv']['tmp_name'], 'r');
$ext = pathinfo($file, PATHINFO_EXTENSION);
fopen
返回一个用于读写文件的文件句柄,但是
pathinfo
需要一个包含文件名的字符串(可选,带有路径),但您给它一个文件句柄


在任何情况下,您都应该查看
$\u文件['upload\u csv']['name']
,这是文件的原始名称,并从中提取文件扩展名。

您只需从文件名中读取扩展名即可。没有必要打开这个文件

$path_info = pathinfo('/foo/bar/baz.bill');

echo $path_info['extension']; // "bill"
$allowedTypes = 'csv, xls, xlsx';

function getExtension($str) {
    $i = strrpos($str,".");
    if (!$i) { return ""; }
    $l = strlen($str) - $i;
    $ext = substr($str,$i+1,$l);
    return $ext;
}

$filename = stripslashes($_FILES[$fileElementName]['name']);
$extension = getExtension($filename);
$extension = strtolower($extension);

$allowedTypes = explode(',',ltrim(rtrim($allowedTypes,','),','));
array_walk($allowedTypes, create_function('&$val', '$val =    ltrim(trim($val),".");')); 

if (!in_array($extension, $allowedTypes))   
{
    $errors[] = "Sorry, but only CSV files are supported";
}

您应该解释您的回答,并提供指向文档和解释的链接
 $extension=strtolower(pathinfo($_FILES['upload_csv']['tmp_name'], PATHINFO_EXTENSION));
 if($ext != "csv")
 {
   $errors[] = "Sorry, but only CSV files are supported";
 }