所以基本上,我只是想在正在上传的文件上检查正确的文件扩展名。
我知道,这个问题之前已经在这里得到了几次回答,虽然我一直得到同样的错误,并且没有解决方案或建议为什么会发生这种情况。
这是我的代码:
$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()
。虽然,仍然显示完全相同的错误。
有没有人对为什么会这样做有任何建议?
答案 0 :(得分:1)
你的问题在这里:
$file = fopen($_FILES['upload_csv']['tmp_name'], 'r');
$ext = pathinfo($file, PATHINFO_EXTENSION);
fopen
返回一个文件句柄,用于读取和写入文件,但pathinfo
期望包含文件名的字符串(可选地,带路径),但是你给它一个文件句柄
在任何情况下,您都应该查看$_FILES['upload_csv']['name']
,这是文件的原始名称,并从中提取文件扩展名。
答案 1 :(得分:0)
$path_info = pathinfo('/foo/bar/baz.bill');
echo $path_info['extension']; // "bill"
答案 2 :(得分:0)
您只需从文件名中读取扩展名即可。没有必要打开文件。
$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";
}
答案 3 :(得分:0)
$extension=strtolower(pathinfo($_FILES['upload_csv']['tmp_name'], PATHINFO_EXTENSION));
if($ext != "csv")
{
$errors[] = "Sorry, but only CSV files are supported";
}