.
How to optimize your PHP installation to handle large
file uploads.Though PHP presents a very versatile and
user friendly interface for handling file uploads, the default
installation is not geared for working with files in excess of 2 Mb.
This article will help you configure your PHP engine for handling
such large file transfers.
The php.ini File
All the configuration settings for your installation are
contained in the php.ini file. Sometimes these setting might be
overridden by directives in apache .htaccess files or even with in
the scripts themselves. However you cannot over ride the settings
that effect file uploads with .htaccess directives in this way. So
let's just concentrate on the ini file.
You can call the phpinfo() function to find the location of your
php.ini file, it will also tell you the current values for the
following settings that we need to modify
- file_uploads
- upload_max_filesize
- max_input_time
- memory_limit
- max_execution_time
- post_max_size
The first one is fairly obvious if you set this off, uploading is
disabled for your installation. We will cover the rest of the
configuration settings in detail below.
upload_max_filesize and post_max_size
- Files are usually POSTed to the webserver in a
format known as 'multipart/form-data'. The post_max_size
sets the upper limit on the amount of data that a script can
accept in this manner. Ideally this value should be larger
than the value that you set for upload_max_filesize.
It's important to realize that upload_max_filesize is the
sum of the sizes of all the files that you are uploading.
post_max_size is the upload_max_filesize plus the sum of the
lengths of all the other fields in the form plus any mime
headers that the encoder might include. Since these fields
are typically small you can often approximate the upload max
size to the post max size.
According to the PHP documentation you can set a
MAX_UPLOAD_LIMIT in your HTML form to suggest a limit to the
browser. Our understanding is that browsers totally ignore
this directive.
memory_limit
- When the PHP engine is handling an incoming POST it
needs to keep some of the incoming data in memory. This
directive has any effect only if you have used the
--enable-memory-limit option at configuration time.
Setting too high a value can be very dangerous because if
several uploads are being handled concurrently all available
memory will be used up and other unrelated scripts that
consume a lot of memory might effect the whole server as
well.
max_execution_time and max_input_time
- These settings define the maximum life time of the
script and the time that the script should spend in
accepting input. If several mega bytes of data are being
transfered max_input_time should be reasonably high. You can
override the setting in the ini file for max_input_time by
calling the set_time_limit() function in your scripts.
Additonal Comments
Apache Settings
- The apache webserver has a LimitRequestBody
configuration directive that restricts the size of all POST
data regardless of the web scripting language in use. Some
RPM installations sets limit request body to 512Kb. You will
need to change this to a larger value or remove the entry
altogether.
|