upload.jpg This PHP script uploads files and manipulates images very easily. The perfect script to generate thumbnails or create a photo gallery! It can convert, resize and work on uploaded images in many ways, apply effects, add labels, watermarks and reflections and other image editing features. You can use it for files uploaded through an HTML form, a Flash uploader, XMLHttpRequest or on local files. It uses the GD library. This script is released under the GPL Version 2, and has been downloaded a few million times in the last few years! If your project is not GPL, commercial licenses are available.

Please note that the lastest code and documentation is now on GitHub!

What is it?

An example will be more useful than any blurb I can write :

namespace Verot\Upload;
$foo = new Upload($_FILES['form_field']); 
if ($foo->uploaded) {
   // save uploaded image with no changes
   if ($foo->processed) {
     echo 'original image copied';
   } else {
     echo 'error : ' . $foo->error;
   // save uploaded image with a new name
   $foo->file_new_name_body = 'foo';
   if ($foo->processed) {
     echo 'image renamed "foo" copied';
   } else {
     echo 'error : ' . $foo->error;
   // save uploaded image with a new name,
   // resized to 100px wide
   $foo->file_new_name_body = 'image_resized';
   $foo->image_resize = true;
   $foo->image_convert = 'gif';
   $foo->image_x = 100;
   $foo->image_ratio_y = true;
   if ($foo->processed) {
     echo 'image renamed, resized x=100
           and converted to GIF';
   } else {
     echo 'error : ' . $foo->error;

What does it actually do in this example?

This example uses a file uploaded via a form. With this single file, it will :

  • copy the file without any modification
  • copy the file after having changed its name to 'foo'
  • copy the file, resizing it to x=100, y=auto, converting it to GIF

How does it work?

  • the class constructor upload handles a uploaded file (it can also handle a local file)
  • some optional parameters can be set up to act on the file during the process
  • the process is called with as an argument the destination directory on the server. If some parameters have been set up, the class will rename, resize, convert files and images
  • when the uploaded file is not needed anymore, we can delete it using clean.

Why use this class?

  • with one uploaded file, you can do as many copies, convertions, resizing you want.
  • you can resize each image dimension, or both, keeping the image ratio or not.
  • you can choose to resize an image only if it is bigger -or smaller- than the wanted sizes
  • you can manipulate the image in many ways, play with colors, add borders, labels and watermarks...
  • its use is simplistic but powerful
  • you can work on uploaded files or local files, useful for batch processing
  • XMLHttpRequest and Flash uploads are fully supported
  • MIME type detection is very comprehensive
  • more than 60 documented configuration settings
  • a lot of variables are set up during the process. You can retrieve all these values after a process.
  • error messages are understandable, and a variable log allows you to see what the class does.
  • it is translated in more than 25 languages
  • it is already widely used on Internet
  • it is free :)

Is it out there on Internet?

The class.upload.php source code has been downloaded well over 1 000 000 times over the last ten years. It is also a key part of the popular K2 content component for Joomla!, downloaded over 2 000 000 times, and has been implemented in numerous CMS and frameworks!

class.upload.php is featured on PHP Classes. If you like the script, please rate it there. You can find it here :

Commercial licenses

Commercial licenses are available here.