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

时间:2013-09-07 03:41:54

标签: 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 CSV files are supported";
}

这是我的错误:

Warning: pathinfo() expects parameter 1 to be string

我现在尝试了大约3个其他替代方案,都使用pathinfo()。虽然,仍然显示完全相同的错误。

有没有人对为什么会这样做有任何建议?

4 个答案:

答案 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";
 }