如何在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";
}