0

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

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

这是我的代码:

$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(). 虽然,仍然显示完全相同的错误。

有人对为什么会发生这种情况有任何建议吗?

4

4 回答 4

1

你的问题在这里:

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

fopen返回一个用于读取和写入文件的文件句柄,但pathinfo需要一个包含文件名的字符串(可选,带有路径),但您正在给它一个文件句柄。

在任何情况下,您都应该查看文件$_FILES['upload_csv']['name']原始名称,并从中提取文件扩展名。

于 2013-09-07T03:47:35.257 回答
0
$path_info = pathinfo('/foo/bar/baz.bill');

echo $path_info['extension']; // "bill"
于 2013-10-19T13:00:35.313 回答
0
 $extension=strtolower(pathinfo($_FILES['upload_csv']['tmp_name'], PATHINFO_EXTENSION));
 if($ext != "csv")
 {
   $errors[] = "Sorry, but only CSV files are supported";
 }
于 2014-02-18T15:53:35.143 回答
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";
}
于 2013-10-19T13:10:18.370 回答