Class upload
What does it do?
It manages file uploads for you. In short, it manages the uploaded file, and allows you to do whatever you want with the file, especially if it is an image, and as many times as you want.
It is the ideal class to quickly integrate file upload in your site. If the file is an image, you can convert, resize, crop it in many ways. You can also apply filters, add borders, text, watermarks, etc... That's all you need for a gallery script for instance. Supported formats are PNG, JPG, GIF and BMP.
You can also use the class to work on local files, which is especially useful to use the image manipulation features.
The class works with PHP 4 and 5, and its error messages can be localized at will.
How does it work?
You instanciate the class with the $_FILES['my_field'] array where my_field is the field name from your upload form. The class will check if the original file has been uploaded to its temporary location (alternatively, you can instanciate the class with a local filename).
You can then set a number of processing variables to act on the file. For instance, you can rename the file, and if it is an image, convert and resize it in many ways. You can also set what will the class do if the file already exists.
Then you call the function process to actually perform the actions according to the processing parameters you set above. It will create new instances of the original file, so the original file remains the same between each process. The file will be manipulated, and copied to the given location. The processing variables will be reseted once it is done.
You can repeat setting up a new set of processing variables, and calling process again as many times as you want. When you have finished, you can call clean to delete the original uploaded file.
If you don't set any processing parameters and call process just after instanciating the class. The uploaded file will be simply copied to the given location without any alteration or checks.
Don't forget to add enctype="multipart/form-data" in your form tag <form> if you want your form to upload the file.
How to use it?
Create a simple HTML file, with a form such as:
Create a file called upload.php:
$handle = new upload($_FILES['image_field']);
if ($handle->uploaded) {
$handle->file_new_name_body = 'image_resized';
$handle->image_resize = true;
$handle->image_x = 100;
$handle->image_ratio_y = true;
$handle->process('/home/user/files/');
if ($handle->processed) {
echo 'image resized';
$handle->clean();
} else {
echo 'error : ' . $handle->error;
}
}How to process local files?
Use the class as following, the rest being the same as above:
$handle = new upload('/home/user/myfile.jpg');How to set the language?
Instantiate the class with a second argument being the language code:
$handle = new upload($_FILES['image_field'], 'fr_FR');
$handle = new upload('/home/user/myfile.jpg', 'fr_FR');How to output the resulting file or picture directly to the browser?
Simply call process() without an argument (or with null as first argument):
$handle = new upload($_FILES['image_field']);
header('Content-type: ' . $handle->file_src_mime);
echo $handle->Process();
die(); Or if you want to force the download of the file: $handle = new upload($_FILES['image_field']);
header('Content-type: ' . $handle->file_src_mime);
header("Content-Disposition: attachment; filename=".rawurlencode($handle->file_src_name).";");
echo $handle->Process();
die();Processing parameters (reseted after each process)
$handle->file_new_name_body = 'new name';
$handle->file_name_body_add = '_uploaded';
$handle->file_new_name_ext = 'txt';
$handle->file_safe_name = true;
$handle->file_overwrite = true;
$handle->file_auto_rename = true;
$handle->auto_create_dir = true;
$handle->dir_auto_chmod = true;
$handle->dir_chmod = 0777;
$handle->file_max_size = '1024'; // 1KB
$handle->mime_check = false;
$handle->mime_magic_check = true;
$handle->no_script = false;
$handle->allowed = array('application/pdf','application/msword', 'image/*');$handle->forbidden = array('application/*');$handle->image_convert = 'jpg';
$handle->image_background_color = '#FF00FF';
$handle->image_default_color = '#FF00FF';
$handle->jpeg_quality = 50;
$handle->jpeg_size = 3072;
$handle->image_max_width = 200;
$handle->image_max_height = 100;
$handle->image_max_pixels = 50000;
$handle->image_max_ratio = 1.5;
$handle->image_min_width = 100;
$handle->image_min_height = 500;
$handle->image_min_pixels = 20000;
$handle->image_min_ratio = 0.5;
$handle->image_resize = true;
$handle->image_x = 100;
$handle->image_y = 200;
$handle->image_ratio = true;
$handle->image_ratio_crop = true;
$handle->image_ratio_fill = true;
$handle->image_ratio_no_zoom_in = true;
$handle->image_ratio_no_zoom_out = true;
$handle->image_ratio_x = true;
$handle->image_ratio_y = true;
$handle->image_ratio_pixels = 25000;
$handle->image_brightness = 40;
$handle->image_contrast = 50;
$handle->image_tint_color = '#FF0000';
$handle->image_overlay_color = '#FF0000';
$handle->image_overlay_percent = 20;
$handle->image_negative = true;
$handle->image_greyscale = true;
$handle->image_threshold = 20;
$handle->image_text = 'test';
$handle->image_text_direction = 'v';
$handle->image_text_color = '#FF0000';
$handle->image_text_percent = 50;
$handle->image_text_background = '#FFFFFF';
$handle->image_text_background_percent = 50;
$handle->image_text_font = 4;
$handle->image_text_x = 5;
$handle->image_text_y = 5;
$handle->image_text_position = 'LR';
$handle->image_text_padding = 5;
$handle->image_text_padding_x = 2;
$handle->image_text_padding_y = 10;
$handle->image_text_alignment = 'R';
$handle->image_text_line_spacing = 3;
$handle->image_flip = 'h';
$handle->image_rotate = 90;
$handle->image_crop = array(50,40,30,20); OR '-20 20%'...
$handle->image_bevel = 20;
$handle->image_bevel_color1 = '#FFFFFF';
$handle->image_bevel_color2 = '#000000';
$handle->image_border = '3px'; OR '-20 20%' OR array(3,2)...
$handle->image_border_color = '#FFFFFF';
$handle->image_frame = 2;
$handle->image_frame_colors = array('#999999', '#FF0000', '#666666', '#333333', '#000000');$handle->image_watermark = 'watermark.png';
$handle->image_watermark_x = 5;
$handle->image_watermark_y = 5;
$handle->image_watermark_position = 'LR';
$handle->image_reflection_height = '25%';
$handle->image_reflection_space = 3;
$handle->image_default_color = '#000000';
$handle->image_reflection_opacity = 60;
Values that can be read before calling process()
Values that can be read before after process()
Requirements
Most of the image operations require GD. GD2 is greatly recommended
The class is compatible with PHP 4.3+, and compatible with PHP5
Changelog
Located in /class.upload.php (line 493)
array
$allowed
(line 1781)
Allowed MIME types
Default is a selection of safe mime-types, but you might want to change it
Simple wildcards are allowed, such as image/* or application/*
bool
$dir_auto_chmod
(line 822)
Set this variable to true to allow automatic chmod of the destination directory if it is not writeable
Default value is true
bool
$dir_auto_create
(line 811)
Set this variable to true to allow automatic creation of the destination directory if it is missing (works recursively)
Default value is true
bool
$dir_chmod
(line 833)
Set this variable to the default chmod you want the class to use when creating directories, or attempting to write in a directory
Default value is 0777 (without quotes)
string
$error
(line 713)
Holds eventual error message in plain english
bool
$file_auto_rename
(line 800)
Set this variable to true to allow automatic renaming of the file if the file already exists
Default value is true
For instance, on uploading foo.ext,
if foo.ext already exists, upload will be renamed foo_1.ext
and if foo_1.ext already exists, upload will be renamed foo_2.ext
string
$file_dst_name
(line 574)
Destination file name
string
$file_dst_name_body
(line 582)
Destination file name body (i.e. without extension)
string
$file_dst_name_ext
(line 590)
Destination file extension
double
$file_max_size
(line 853)
Set this variable to change the maximum size in bytes for an uploaded file
Default value is the value upload_max_filesize from php.ini
string
$file_name_body_add
(line 741)
Set this variable to add a string to the faile name body
string
$file_new_name_body
(line 733)
Set this variable to replace the name body (i.e. without extension)
string
$file_new_name_ext
(line 749)
Set this variable to change the file extension
bool
$file_overwrite
(line 843)
Set this variable tu true to allow overwriting of an existing file
Default value is false, so no files will be overwritten
boolean
$file_safe_name
(line 757)
Set this variable to format the filename (spaces changed to _)
string
$file_src_error
(line 542)
Holds eventual PHP error code from $_FILES
string
$file_src_mime
(line 526)
Uploaded file MIME type
string
$file_src_name
(line 502)
Uploaded file name
string
$file_src_name_body
(line 510)
Uploaded file name body (i.e. without extension)
string
$file_src_name_ext
(line 518)
Uploaded file name extension
double
$file_src_size
(line 534)
Uploaded file size, in bytes
array
$forbidden
(line 1794)
Forbidden MIME types
Default is a selection of safe mime-types, but you might want to change it To only check for forbidden MIME types, and allow everything else, set allowed to array('* / *') without the spaces
Simple wildcards are allowed, such as image/* or application/*
string
$image_background_color
(line 1149)
Background color, used to paint transparent areas with
If set, it will forcibly remove transparency by painting transparent areas with the color This setting will fill in all transparent areas in PNG and GIF, as opposed to image_default_color which will do so only in BMP, JPEG, and alpha transparent areas in transparent GIFs This setting overrides image_default_color
Default value is null
integer
$image_bevel
(line 1611)
Adds a bevel border on the image
Value is a positive integer, representing the thickness of the bevel
If the bevel colors are the same as the background, it makes a fade out effect
Default value is null (no bevel)
string;
$image_bevel_color1
(line 1624)
Top and left bevel color
Value is a color, in hexadecimal format This setting is used only if image_bevel is set
Default value is #FFFFFF
string;
$image_bevel_color2
(line 1637)
Right and bottom bevel color
Value is a color, in hexadecimal format This setting is used only if image_bevel is set
Default value is #000000
integer
$image_border
(line 1657)
Adds a single-color border on the outer of the image
Values are four dimensions, or two, or one (CSS style) They represent the border thickness top, right, bottom and left. These values can either be in an array, or a space separated string. Each value can be in pixels (with or without 'px'), or percentage (of the source image)
See image_crop for valid formats
If a value is negative, the image will be cropped. Note that the dimensions of the picture will be increased by the borders' thickness
Default value is null (no border)
string;
$image_border_color
(line 1670)
Border color
Value is a color, in hexadecimal format. This setting is used only if image_border is set
Default value is #FFFFFF
integer
$image_brightness
(line 1185)
Corrects the image brightness
Value can range between -127 and 127
Default value is null
integer
$image_contrast
(line 1197)
Corrects the image contrast
Value can range between -127 and 127
Default value is null
string
$image_convert
(line 878)
Set this variable to convert the file if it is an image
Possibles values are : ''; 'png'; 'jpeg'; 'gif'; 'bmp'
Default value is '' (no conversion)
If resize is true, convert will be set to the source file extension
string
$image_crop
(line 1597)
Crops an image
Values are four dimensions, or two, or one (CSS style) They represent the amount cropped top, right, bottom and left. These values can either be in an array, or a space separated string. Each value can be in pixels (with or without 'px'), or percentage (of the source image)
For instance, are valid:
$foo->image_crop = 20 OR array(20);
$foo->image_crop = '20px' OR array('20px');
$foo->image_crop = '20 40' OR array('20', 40);
$foo->image_crop = '-20 25%' OR array(-20, '25%');
$foo->image_crop = '20px 25%' OR array('20px', '25%');
$foo->image_crop = '20% 25%' OR array('20%', '25%');
$foo->image_crop = '20% 25% 10% 30%' OR array('20%', '25%', '10%', '30%');
$foo->image_crop = '20px 25px 2px 2px' OR array('20px', '25%px', '2px', '2px');
$foo->image_crop = '20 25% 40px 10%' OR array(20, '25%', '40px', '10%');If a value is negative, the image will be expanded, and the extra parts will be filled with black
Default value is null (no cropping)
boolean
$image_default_color
(line 1165)
Default color for non alpha-transparent images
This setting is to be used to define a background color for semi transparent areas of an alpha transparent when the output format doesn't support alpha transparency This is useful when, from an alpha transparent PNG image, or an image with alpha transparent features if you want to output it as a transparent GIFs for instance, you can set a blending color for transparent areas If you output in JPEG or BMP, this color will be used to fill in the previously transparent areas
The default color white
string;
$image_flip
(line 1555)
Flips the image vertically or horizontally
Value is either 'h' or 'v', as in horizontal and vertical
Default value is null (no flip)
integer
$image_frame
(line 1688)
Adds a multi-color frame on the outer of the image
Value is an integer. Two values are possible for now:
Note that the dimensions of the picture will be increased by the borders' thickness
Default value is null (no frame)
string
$image_frame_colors
(line 1711)
Sets the colors used to draw a frame
Values is a list of n colors in hexadecimal format. These values can either be in an array, or a space separated string.
The colors are listed in the following order: from the outset of the image to its center
For instance, are valid:
$foo->image_frame_colors = '#FFFFFF #999999 #666666 #000000';
$foo->image_frame_colors = array('#FFFFFF', '#999999', '#666666', '#000000');This setting is used only if image_frame is set
Default value is '#FFFFFF #999999 #666666 #000000'
boolean
$image_is_palette
(line 1173)
Flag set to true when the image is not true color
boolean
$image_is_transparent
(line 1124)
Flag set to true when the image is transparent
This is actually used only for transparent GIFs
integer
$image_max_height
(line 1016)
Set this variable to set a maximum image height, above which the upload will be invalid
Default value is null
long
$image_max_pixels
(line 1026)
Set this variable to set a maximum number of pixels for an image, above which the upload will be invalid
Default value is null
float
$image_max_ratio
(line 1038)
Set this variable to set a maximum image aspect ratio, above which the upload will be invalid
Note that ratio = width / height
Default value is null
integer
$image_max_width
(line 1006)
Set this variable to set a maximum image width, above which the upload will be invalid
Default value is null
integer
$image_min_height
(line 1058)
Set this variable to set a minimum image height, below which the upload will be invalid
Default value is null
long
$image_min_pixels
(line 1068)
Set this variable to set a minimum number of pixels for an image, below which the upload will be invalid
Default value is null
float
$image_min_ratio
(line 1080)
Set this variable to set a minimum image aspect ratio, below which the upload will be invalid
Note that ratio = width / height
Default value is null
integer
$image_min_width
(line 1048)
Set this variable to set a minimum image width, below which the upload will be invalid
Default value is null
string;
$image_overlay_color
(line 1235)
Applies a colored overlay on the image
Value is an hexadecimal color, such as #FFFFFF
To use with image_overlay_percent
Default value is null
integer
$image_overlay_percent
(line 1249)
Sets the percentage for the colored overlay
Value is a percentage, as an integer between 0 and 100
Unless used with image_overlay_color, this setting has no effect
Default value is 50
bool
$image_ratio
(line 908)
Set this variable to keep the original size ratio to fit within image_x x image_y
Default value is false
mixed
$image_ratio_crop
(line 924)
Set this variable to keep the original size ratio to fit within image_x x image_y
The image will be resized as to fill the whole space, and excedent will be cropped
Value can also be a string, one or more character from 'TBLR' (top, bottom, left and right) If set as a string, it determines which side of the image is kept while cropping. By default, the part of the image kept is in the center, i.e. it crops equally on both sides
Default value is false
mixed
$image_ratio_fill
(line 941)
Set this variable to keep the original size ratio to fit within image_x x image_y
The image will be resized to fit entirely in the space, and the rest will be colored. The default color is white, but can be set with image_default_color
Value can also be a string, one or more character from 'TBLR' (top, bottom, left and right) If set as a string, it determines in which side of the space the image is displayed. By default, the image is displayed in the center, i.e. it fills the remaining space equally on both sides
Default value is false
bool
$image_ratio_no_zoom_in
(line 965)
Set this variable to keep the original size ratio to fit within image_x x image_y, but only if original image is bigger
Default value is false
bool
$image_ratio_no_zoom_out
(line 976)
Set this variable to keep the original size ratio to fit within image_x x image_y, but only if original image is smaller
Default value is false
mixed
$image_ratio_pixels
(line 954)
Set this variable to a number of pixels so that image_x and image_y are the best match possible
The image will be resized to have approximatively the number of pixels The aspect ratio wil be conserved
Default value is false
bool
$image_ratio_x
(line 986)
Set this variable to calculate image_x automatically , using image_y and conserving ratio
Default value is false
bool
$image_ratio_y
(line 996)
Set this variable to calculate image_y automatically , using image_x and conserving ratio
Default value is false
string;
$image_reflection_color
(line 1528)
Sets the color of the reflection background (deprecated)
Value is an hexadecimal color, such as #FFFFFF
Default value is #FFFFFF
This setting is relevant only if image_reflection_height is set
This setting is now deprecated in favor of image_default_color
mixed;
$image_reflection_height
(line 1498)
Sets the height of the reflection
Value is an integer in pixels, or a string which format can be in pixels or percentage. For instance, values can be : 40, '40', '40px' or '40%'
Default value is null, no reflection
integer
$image_reflection_opacity
(line 1543)
Sets the initial opacity of the reflection
Value is an integer between 0 (no opacity) and 100 (full opacity). The reflection will start from image_reflection_opacity and end up at 0
Default value is 60
This setting is relevant only if image_reflection_height is set
integer
$image_reflection_space
(line 1512)
Sets the space between the source image and its relection
Value is an integer in pixels, which can be negative
Default value is 2
This setting is relevant only if image_reflection_height is set
bool
$image_resize
(line 865)
Set this variable to true to resize the file if it is an image
You will probably want to set image_x and image_y, and maybe one of the ratio variables
Default value is false (no resizing)
string;
$image_rotate
(line 1567)
Rotates the image by increments of 45 degrees
Value is either 90, 180 or 270
Default value is null (no rotation)
string;
$image_text
(line 1295)
Adds a text label on the image
Value is a string, any text. Text will not word-wrap, although you can use breaklines in your text "\n"
If set, this setting allow the use of all other settings starting with image_text_
Replacement tokens can be used in the string:
gd_version src_name src_name_body src_name_ext src_pathname src_mime src_x src_y src_type src_bits src_pixels src_size src_size_kb src_size_mb src_size_human dst_path dst_name_body dst_pathname dst_name dst_name_ext dst_x dst_y date time host server ipThe tokens must be enclosed in square brackets: [dst_x] will be replaced by the width of the picture
Default value is null
string;
$image_text_alignment
(line 1471)
Sets the text alignment
Value is a string, which can be either 'L', 'C' or 'R'
Default value is 'C'
This setting is relevant only if the text has several lines.
string;
$image_text_background
(line 1343)
Sets the text background color for the text label
Value is an hexadecimal color, such as #FFFFFF
Default value is null (no background)
integer
$image_text_background_percent
(line 1355)
Sets the text background visibility in the text label
Value is a percentage, as an integer between 0 and 100
Default value is 100
string;
$image_text_color
(line 1319)
Sets the text color for the text label
Value is an hexadecimal color, such as #FFFFFF
Default value is #FFFFFF (white)
string;
$image_text_direction
(line 1307)
Sets the text direction for the text label
Value is either 'h' or 'v', as in horizontal and vertical
Default value is h (horizontal)
mixed;
$image_text_font
(line 1368)
Sets the text font in the text label
Value is a an integer between 1 and 5 for GD built-in fonts. 1 is the smallest font, 5 the biggest Value can also be a string, which represents the path to a GDF font. The font will be loaded into GD, and used as a built-in font.
Default value is 5
integer
$image_text_line_spacing
(line 1485)
Sets the text line spacing
Value is an integer, in pixels
Default value is 0
This setting is relevant only if the text has several lines.
integer
$image_text_padding
(line 1429)
Sets the text label padding
Value is in pixels, representing the distance between the text and the label background border
Default value is 0
This setting can be overriden by image_text_padding_x and image_text_padding_y
integer
$image_text_padding_x
(line 1443)
Sets the text label horizontal padding
Value is in pixels, representing the distance between the text and the left and right label background borders
Default value is null
If set, this setting overrides the horizontal part of image_text_padding
integer
$image_text_padding_y
(line 1457)
Sets the text label vertical padding
Value is in pixels, representing the distance between the text and the top and bottom label background borders
Default value is null
If set, his setting overrides the vertical part of image_text_padding
integer
$image_text_percent
(line 1331)
Sets the text visibility in the text label
Value is a percentage, as an integer between 0 and 100
Default value is 100
string;
$image_text_position
(line 1389)
Sets the text label position within the image
Value is one or two out of 'TBLR' (top, bottom, left, right)
The positions are as following:
TL T TR
L R
BL B BRDefault value is null (centered, horizontal and vertical)
Note that is image_text_x and image_text_y are used, this setting has no effect
integer
$image_text_x
(line 1402)
Sets the text label absolute X position within the image
Value is in pixels, representing the distance between the left of the image and the label If a negative value is used, it will represent the distance between the right of the image and the label
Default value is null (so image_text_position is used)
integer
$image_text_y
(line 1415)
Sets the text label absolute Y position within the image
Value is in pixels, representing the distance between the top of the image and the label If a negative value is used, it will represent the distance between the bottom of the image and the label
Default value is null (so image_text_position is used)
integer
$image_threshold
(line 1209)
Applies threshold filter
Value can range between -127 and 127
Default value is null
string;
$image_tint_color
(line 1221)
Applies a tint on the image
Value is an hexadecimal color, such as #FFFFFF