If you've got a web application that uploads files to the server through a PHP script, you might have noticed that by default you can't upload terribly large files. Here's how to change it.

The reason the limit is set fairly low by default is for stability and security reasons - a malicious script or attacker could attempt to DoS your server with large file uploads and temporarily shut your application down.

To change the values you'll need to edit your php.ini file, normally found at this file path:

/etc/php.ini

Here are the settings you want to change:

post_max_size

This setting controls the size of an HTTP post, and it needs to be set larger than the upload_max_filesize setting.

upload_max_filesize

This value sets the maximum size of an upload file.

memory_limit

You'll want to make sure your script memory limit is set to a decent size, probably larger than either of the other two settings.

Setting the Variables

You can set the values by using a numeric value followed by M for the amount of MB you want to allocate for each variable. For instance, to allow 20MB files to be uploaded, you'd use something like this:

memory_limit = 64M

upload_max_filesize = 20M

post_max_size = 25M

You'll need to restart your Apache server once you've made this change, with this command:

/etc/init.d/httpd restart

Setting the Upload Size Per Application

You can make this setting change for a specific web application by putting it into the .htaccess file instead, in the directory of the application. Note that this will only work if your server has enabled overrides for your virtual host or server.

For instance, you could put the following into the file:

php_value memory_limit = 64M

php_value upload_max_filesize = 20M

php_value post_max_size = 25M

Once you save the file, the changes should be applied.