The main function in this script is for the validation of our upload, here we do things like check the file type, and if an image, what it's dimensions are.
<?php
function validate_upload($the_file) {
global $my_max_file_size, $image_max_width, $image_max_height,$allowed_types,$the_file_type,$registered_types;
$start_error = "\n<b>Error:</b>\n<ul>";
if ($the_file == "none") { # do we even have a file?
$error .= "\n<li>You did not upload anything!</li>";
} else { # check if we are allowed to upload this file_type
if (!in_array($the_file_type,$allowed_types)) { $error .= "\n<li>The file that you uploaded was of a ". "type that is not allowed, you are only allowed to upload files of the type:\n<ul>"; while ($type = current($allowed_types)) { $error .= "\n<li>" . $registered_types[$type] . " (" . $type . ")</li>"; next($allowed_types); } $error .= "\n</ul>"; }
if (ereg("image",$the_file_type) && (in_array($the_file_type,$allowed_types))) {
we start our function off and tell PHP what variables have a global scope (i.e. originated outside this function), this also saves us having to use $GLOBALS[] everywhere.
5:
Start our error message off
6-9:
if there is no file, $the_file is set to 'none' so we check if the user actually specified a file to upload
13-21:
Here, our in_array function and the two arrays we built earlier come into play, we loop through the $allowed_types array and see if the PHP set $the_file_type is in there, if it is the script knows that it is allowed to accept this. If it is not allowed, then we use the $registered_types array to give a sensible error message.
23-35:
If the uploaded file is an image, we want to check that it's dimensions are smaller than our pre-defined maximum values. We use the PHP function getimagesize() to check the file dimensions and build up the error string if it is too big.
37-42:
If we have anything in $error, we finish the string off and return it, else we return false. There that's the hard work done.