Reputation: 24375
So basically, I am simply just trying to check for the correct file extension on a file that is being uploaded.
I know, this question has been answered on here a few times before, although I keep getting the same error and there is no solution or suggestions out there to why this is happening.
Here is my code:
$file = fopen($_FILES['upload_csv']['tmp_name'], 'r');
$ext = pathinfo($file, PATHINFO_EXTENSION);
if($ext != "csv")
{
$errors[] = "Sorry, but only CSV files are supported";
}
Here is my error:
Warning: pathinfo() expects parameter 1 to be string
I have tried around 3 other alternatives now, all using pathinfo()
. Although, the exact same error is still shown.
Does anyone have any suggestions to why this is happening?
Upvotes: 0
Views: 3597
Reputation: 305
$extension=strtolower(pathinfo($_FILES['upload_csv']['tmp_name'], PATHINFO_EXTENSION));
if($ext != "csv")
{
$errors[] = "Sorry, but only CSV files are supported";
}
Upvotes: 0
Reputation: 1987
You can simply read the extension from the name of the file. There is no need to fopen the file.
$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";
}
Upvotes: 0
Reputation: 13586
$path_info = pathinfo('/foo/bar/baz.bill');
echo $path_info['extension']; // "bill"
Upvotes: 0
Reputation:
Your problem is here:
$file = fopen($_FILES['upload_csv']['tmp_name'], 'r');
$ext = pathinfo($file, PATHINFO_EXTENSION);
fopen
returns a file handle for use reading and writing a file, but pathinfo
is expecting a string containing a filename (optionally, with a path), but you're giving it a file handle.
You should, in any case, be looking at $_FILES['upload_csv']['name']
, which is the original name of the file, and extracting the file extension from that.
Upvotes: 1