I'm making a page where the user upload a file. I want an if statement to create an $error variable if the file type is anything other jpg, gif, and pdf.
Here's my code:
$file_type = $_FILES['foreign_character_upload']['type']; //returns the mimetype
if(/*$file_type is anything other than jpg, gif, or pdf*/) {
$error_message = 'Only jpg, gif, and pdf files are allowed.';
$error = 'yes';
}
I'm having difficulty structuring the if statement. How would I say that?
Use this simple code...
See also Zend Framework's Zend_File_Transfer_Adapter_Http and Zend_Form_Element_File. You can add multiple different validators like minimum image resolution, MIME type, minimum file size, allowed file extensions, etc.
Put the allowed types in an array and use
in_array()
.edit
I just realized that you want to allow PDF files as well. In that case check out PHP's Fileinfo class and functions. But as far as security goes, you still shouldn't rely on
$_FILES[]['type']
:)I'll leave the rest here in case it helps someone else who finds this question
For checking the mime type of the image,
$_FILES[]['type']
could be unsafe. This data is sent by the browser and could be easily spoofed.You should use the
getimagesize()
function if you only want to allow images to be uploaded (despite its maybe misleading name). This function won't just give you the size but all the data you will probably need about the image.I used the following script in an image handling class:
Notice that
getimagesize()
returns an associative array containing a 'mime' index. The data here is reliable.In another function I checked the mime type of the image and converted it to PNG with the appropriate GD function:
You probably won't need to do all of this, but you can see what mime types appear for the filetypes you have specified. Notice that a jpeg could have two different mime types.
Hope this helps.