PHP check file extension
pathinfo
is what you're looking for
PHP.net
$file_parts = pathinfo($filename);
switch($file_parts['extension'])
{
case "jpg":
break;
case "exe":
break;
case "": // Handle file extension for files ending in '.'
case NULL: // Handle no file extension
break;
}
How to get a file's extension in PHP?
People from other scripting languages always think theirs is better because they have a built-in function to do that and not PHP (I am looking at Pythonistas right now :-)).
In fact, it does exist, but few people know it. Meet pathinfo()
:
$ext = pathinfo($filename, PATHINFO_EXTENSION);
This is fast and built-in. pathinfo()
can give you other information, such as canonical path, depending on the constant you pass to it.
Remember that if you want to be able to deal with non ASCII characters, you need to set the locale first. E.G:
setlocale(LC_ALL,'en_US.UTF-8');
Also, note this doesn't take into consideration the file content or mime-type, you only get the extension. But it's what you asked for.
Lastly, note that this works only for a file path, not a URL resources path, which is covered using PARSE_URL.
Enjoy
Check file extension in upload form in PHP
Using if( $ext !== 'gif'
) might not be efficient. What if you allow like 20 different extensions?
Try:
$allowed = array('gif', 'png', 'jpg');
$filename = $_FILES['video_file']['name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if (!in_array($ext, $allowed)) {
echo 'error';
}
How to check for the correct file extension in PHP?
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.
how to check for certain file extension in a folder with php
Use the glob()
function.
$result = glob("my/folder/uploads/*.zip");
It will return an array with the *.zip-files.
How to check if multiple files' extensions are in_array
As mentioned by the commenters, your $allowed
array contains a list of valid mime-types
, not extensions. You must decide what you want to use to check the validity of the file.
If you decide to go with the pure file extension, then in the loop you must also extract the extension, and compare that to a new list, one that contains expected valid extensions. Something like this:
$files = ['orange.jpg', 'apple.jpeg'];
$allowed = ['jpg', 'jpeg', 'png', 'gif'];
foreach($files as $names) {
$pathinfo = pathinfo($names); /* split path in its components */
$extension = strtolower($pathinfo['extension']); /* extract the extension and normalize to lowercase */
if (in_array($extension, $allowed)) {
echo "Valid image extension";
} else {
echo "Invalid image extension";
}
}
How to get the file extension in PHP?
No need to use string functions. You can use something that's actually designed for what you want: pathinfo()
:
$path = $_FILES['image']['name'];
$ext = pathinfo($path, PATHINFO_EXTENSION);
Related Topics
Post Content-Length Exceeds the Limit
Why Should I Use Templating System in PHP
PHP HTML Domdocument Getelementbyid Problems
Is There a PHP Sandbox, Something Like Jsfiddle Is to Js
Traits in PHP - Any Real World Examples/Best Practices
Is There a Difference Between !== and != in PHP
What Delimiter to Use for Preg_Replace in PHP (Replace Working Outside of PHP But Not Inside)
How to Install the Ext-Curl Extension with PHP 7
Count Specific Values in Multidimensional Array
Nested Array. Third Level Is Disappearing
Fatal Error: Using $This When Not in Object Context