Re: File uploads in PHP

From: Date: Fri, 17 Aug 2001 09:56:25 +0000
Subject: Re: File uploads in PHP
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-63165@lists.php.net to get a copy of this message
Hi there, I haven't tested any of this, and there are probably some things that need adding, but it'll give you an idea at least. Form element: <input type="file" name="thefile"> // What files do we want? $types_we_want = array("image/gif", "image/jpeg", "image/pjpeg"); // allows jpegs and gifs // What is the max size we want (in bytes)? $size_we_want = (50 * 1024); // 50Kb // function to test whether or not the file is an image, and whether it is in the correct // size restriction function CheckImage($thefile, $thefile_name, $thefile_type, $thefile_size, $types_we_want, $size_we_want) { if (!in_array($thefile_type, $types_we_want)) { // the file is of invalid type return false; } else if ($thefile_size > $size_we_want) { // too big return false; } return true; } // function to explain what's wrong with the file function AnImageError($thefile, $thefile_name, $thefile_type, $thefile_size, $types_we_want, $size_we_want) { if (!in_array($thefile_type, $types_we_want)) { // the file is of invalid type echo $thefile_name . " is not a jpeg or gif!"; } else if ($thefile_size > $size_we_want) { // too big echo $thefile_name ." is bigger than the allowed file size of " . ($size_we_want / 1024) . "Kb"; } } // function to change the name of the image (if you don't do this, and one person // uploads a file named "name.jpg" and then another person uploads a file with // the same name, the second will overwrite the original function NewImageName($thefile_name, $thefile_type) { $timestamp = time(); // use a timestamp $prefix = substr($thefile_name, 0, 2); // get two characters from the beginning of the filename // for a bit of randomness (use another function like mtsrand() (see manual)) // for something better if ($thefile_type == "image/jpeg" || $thefile_type == "image/pjpeg") { // file is a jpeg $ext = ".jpg"; } else { // file is a gif $ext = ".gif"; } $newfilename = $prefix . $timestamp . $ext; return $newfilename; } // function to upload the file. function DoUploadFile($thefile, $thefile_name, $thefile_type, $thefile_size) { global $connection; // this contains details of your mysql connection $size = @GetImageSize($thefile); list($ignoreme,$width,$ignoremeagain,$height) = explode("\"",$size[3]); // gets the width and height of the file // rename the image with the function we defined above $newfilename = NewImageName($thefile_name, $thefile_type); // specify a directory to copy the temp file to in the following line // eg /home/mysite/web/images if (!@copy($thefile, "/path/to/store/files" . $newfilename)) { echo "Sorry, something's gone wrong here."; } else { // insert the data into your table. the columns are the unique id of the file, // the date the file is uploaded in datetime format, // the name of the file (varchar, 50), its size in bytes( int), its width(int) and height(int). $insert_data = "INSERT INTO mysql_table (picid, picorigin, picname, picsize, picwidth, picheight) VALUES ('', NOW(), '$newfilename', '$thefile_size', '$width', '$height')"; $do_upload = @mysql_query($insert_data, $connection); if (!$do_upload) { // query failed echo "There was an error with the database."; } else { echo "Thanks. " . $thefile_name . " has been uploaded."; } } } // Put it all together in your form handling if ($thefile_name != "") { if (!CheckImage($thefile, $thefile_name, $thefile_type, $thefile_size, $types_we_want, $size_we_want)) { AnImageError($thefile, $thefile_name, $thefile_type, $thefile_size, $types_we_want, $size_we_want); } else { DoUploadFile($thefile, $thefile_name, $thefile_type, $thefile_size); } } Hope that helps, James. "Dr. Evil" <drevil@sidereal.kz> wrote in message news:20010817020656.14242.qmail@sidereal.kz... > > My PHP script needs to receive some files. I've seen sites which > accept them; they have a Browse button which lets the user select a > file to send. That's what I want to do. > > I have a few questions about this. First of all, this is with > php4.06. Secondly, the files are all going to be images, and not very > large: no more than 50k. > > What's the best way to do this? I notice that PHP can store these > files on disk, but I'm going to be storing them in a DB. I would > rather receive them directly into a PHP variable. Is this possible? > Or should I take them in a file, and then read them back in to a > variable? > > Also, if they need to go into a file, which directory is safest for > this? /tmp contains some important files. And finally, how do I > limit the maximum file size that PHP will accept? > > Thanks

« previous php.general (#63165) next »