Change the maximum upload file size
Asked Answered
H

24

597

I have a website hosted on a PC I have no access to. I have an upload form allowing people to upload mp3 files up to 30MB big. My server side script is done in PHP.

Every time I try and upload a file, I receive an error claiming that the file exceeds the maximum size allowed, so I need to increase the size. My research on the web suggested changing the .htaccess file which I do not have access to, so that won't work. Others suggested that I should add a custom php.ini file to my root which did not work. Any other suggestions?

Hotfoot answered 2/2, 2010 at 14:0 Comment(1)
Does this answer your question? Changing upload_max_filesize on PHPConakry
P
1031

You need to set the value of upload_max_filesize and post_max_size in your php.ini :

; Maximum allowed size for uploaded files.
upload_max_filesize = 40M

; Must be greater than or equal to upload_max_filesize
post_max_size = 40M

After modifying php.ini file(s), you need to restart your HTTP server to use the new configuration.

If you can't change your php.ini, you're out of luck. You cannot change these values at run-time; uploads of file larger than the value specified in php.ini will have failed by the time execution reaches your call to ini_set.

See the Description of core php.ini directives.

Pericynthion answered 2/2, 2010 at 14:5 Comment(12)
do you perhaps know the default route that the php.ini file is stored?Hotfoot
On Linux, it's usually in /etc/php/ or something along those lines. If you're on a shared server, you're out of luck unless your hosting provider is generous enough to provide a per-user php.ini file.Shimmy
If your using WAMP under windows, you can edit it by clicking the WAMP icon > PHP -> php.ini. In Debian, my config file is in /etc/php5/apache2.Pericynthion
Thats the main issue, my website is on a shared server. So is that the general consensus, that I'm fresh out of luck? :(Hotfoot
There is no way to bypass this, by design - it's important that the owner of a server be able to explicitly cap upload size for users. The best you can do is appeal to somebody who has access to php.ini to make the changes for you.Pericynthion
I contacted my service provider and it seems like they might help me out. Thanks for the input everybody.Hotfoot
I suggest setting a higher size on post_max_size. The overall size of the posted fields may be higher than the filesize, so if you are having the edge case of someone uploading a 40MB file it will fail due to exceeded post_max_size.Longawa
@YoMomma - The easiest way to find your php.ini file is to run phpinfo(); in any .php file. Does your shared server give you a cpanel? Look for a PHP Configuration button, some hosts allow you to change some settings. Hostgator, for example, allows you to change it, but with a cap - support.hostgator.com/articles/cpanel/…Deadeye
I was testing out this solution on my Host GoDaddy and it works. Slight note is that you'd need to create the "php.ini" file in the "\publuc_html" folder as it would not exist originally.Coppersmith
Please notice that memory_limit also limits the upload size.Orosco
On Ubuntu/Apache: nano /etc/php/7.4/apache2/php.ini replace version with yours.Icon
In my case the Upload limits were showing properly but still errored. I had to update Nginx by editing nginx.conf and adding client_max_body_size to the http block.Jeter
O
176

You can change it via an .htaccess file.

.htaccess files are stored in the same directory as your .php files are. They modify configuration for that folder and all sub-folders. You simply use them by creating an .htaccess file in the directory of your choice (or modify it if present).

The following should enable you to increase your upload limit (if the server provider allows PHP config changes via .htaccess).

php_value upload_max_filesize 40M
php_value post_max_size 42M
Orchard answered 2/2, 2010 at 16:5 Comment(4)
It seems that it doesn't always work. On my dev machines setting appropriate value in .htaccess did the job. On the shared hosting however this setting do not work however error message is showing that maximum allowed upload size is that value I set in .htaccess. So a very wierd situation happens.Bobbysoxer
Looks like adding this in the .htaccess only works if you are running Apache. Try it and works fine for me.Wahoo
This doesn't work if these 2 lines in php.ini were uncommented:; Name for user-defined php.ini (.htaccess) files. Default is ".user.ini" ;user_ini.filename = ".user.ini" ; To disable this feature set this option to empty value ;user_ini.filename =Grati
Worth noting that if you're using apache CGI or Fast CGI this will cause 500 errors. Wrap this inside <IfModule mod_php7.c> </IfModule>Homeless
T
66

I had the same problem and i created a .user.ini file and put it in the directory in which the upload script was located. Than inside that file i set these these two values:

  upload_max_filesize = 40M

  post_max_size = 40M

and it worked great for me!

Tristis answered 30/7, 2013 at 22:17 Comment(3)
Great. Works with fastcgi enabled too. Requires PHP5.3 or newer.Underdrawers
Ok, this worked on a shared server when nothing else would work. Great find.Senility
It took me some time to figure out it was .user.ini and not user.iniFulvous
E
61

You can also use ini_set function (only for PHP version below 5.3):

ini_set('post_max_size', '64M');
ini_set('upload_max_filesize', '64M');

Like @acme said, in php 5.3 and above this settings are PHP_INI_PERDIR directives so they can't be set using ini_set. You can use user.ini instead.

Ec answered 26/1, 2013 at 12:38 Comment(1)
In recent PHP versions these ini-settings are PHP_INI_PERDIR only, so you can't set them in your script. See here for more details.Longawa
C
57

To locate the ini file, first run

php -i | grep -i "loaded configuration file"

Then open the file and change

upload_max_filesize = 2M
post_max_size = 2M

replacing the 2M with the size you want, for instance 100M.

I've got a blog post about with a little more info too http://www.seanbehan.com/how-to-increase-or-change-the-file-upload-size-in-the-php-ini-file-for-wordpress

Cohlette answered 24/8, 2013 at 16:23 Comment(4)
It shows the file as /etc/php5/cli/php.ini but my config file is /etc/php5/apache2/php.ini. Some kind of misleading.Archivolt
There are 2 php.ini files... and with that command in answer, it shows you which one are you using! So There you need to make changes in order to take effect!Essex
How would that be true @lewis4u, if the server runs in fpm? What you are using in the server and on the command line are different things. The real php.ini is what a phpinfo() call on the server will show. As the CLI process lives only for one command, I don't see how the php.ini in cli would take precedence to fpm. It's possible this was different in 2017, but I think that' unlikely. Please correct me, if I'm wrong, anybody.Otha
@Otha You're correct. CLI and FPM can be using two completely different configs.Disject
C
45

I have the same problem in the past .. and i fixed it through .htaccess file

When you make change on php configration through .htaccess you should put configrations in IfModule tag, other that the Internal server error will arise.

This is an example, it works fine for me:

<IfModule mod_php5.c>
   php_value upload_max_filesize 40M
   php_value post_max_size 40M
</IfModule>

And this is php referance if you want to understand more. http://php.net/manual/en/configuration.changes.php

Cambridge answered 4/6, 2013 at 12:43 Comment(3)
Provided you have override capabilities.Homager
To support PHP.7 add the same block with: <IfModule mod_php7.c>Fortissimo
this is a very important remark wiithout wrapping it in ifmodule with specifying your php version it wont work !!Homopolar
H
17

I resolved this issue by creating a file called .user.ini in the directory where the PHP file scripts reside (this means any PHP script in this directory gets the new file size limit)

The contents of .user.ini were:

upload_max_filesize = 40M
post_max_size = 40M
Heall answered 16/9, 2015 at 21:49 Comment(2)
This is the solution for me. Just works fine. If you are using a framework like codeignitor, ".user.ini" needs to be in the same place as index.phpArapaima
Thanks. That's works for me. This is ideal for shared hosting, where you do not have access to php.ini. I would just add that it is available since PHP 5.3Antidisestablishmentarianism
A
14

the answers are a bit incomplete, 3 things you have to do

in php.ini of your php installation (note: depending if you want it for CLI, apache, or nginx, find the right php.ini to manipulate. For nginx it is usually located in /etc/php/7.1/fpm where 7.1 depends on your version. For apache usually /etc/php/7.1/apache2)

post_max_size=500M

upload_max_filesize=500M

memory_limit=900M

or set other values. Restart/reload apache if you have apache installed or php-fpm for nginx if you use nginx.

Arnst answered 12/4, 2018 at 21:43 Comment(0)
T
12

many times i have noticed that site wit shared hosting do not allow to change settings in php.ini files. one also can not even crate .htaaccess file at all. in such situation one can try following things

ini_set('upload_max_filesize', '10M');
ini_set('post_max_size', '10M');
ini_set('max_input_time', 300);
ini_set('max_execution_time', 300);
Talky answered 30/8, 2017 at 8:31 Comment(1)
Thank you I forgot the name of the timeouts so this is the right answer because even if you increase max upload size the process can still time out.Freer
C
8

Perhaps this should be a comment to @seanb123 and @Fredrick Gauss commenting on his comment, but for me in Drupal 8.1 with PHP 7 the file I needed to modify was located here:

/etc/php/7.0/apache2/php.ini

I modded probably four other php.ini files, including the one my system called the "Loaded Configuration File" (php -i | grep -i "loaded configuration file") and the one found on the info.php page but none of them helped. The key to discovering the correct path was found on a site from 2012. They said the path "/etc/php5/apache2/php.ini" was deprecated even BACK THEN but it gave me a clue where to find it. For PHP7 it's a little different than in PHP5 but the concept is the same.

Maybe this will help some otherwise helpless schmuck like myself.

That being said, the answer to the OP in my case would be that someone with admin privileges on the box would have to do it.

The site that helped me: http://www.evilbox.ro/linux/remove-ispconfig-maximum-upload-size-of-2m-for-wordpress/

This is also addressed here: Import file size limit in PHPMyAdmin

EDIT: the full text of my note to myself:

In order to change the max upload size, edit upload_max_filesize and [if needed?] post_max_size in /etc/php/7.0/apache2/php.ini (or in older versions: /etc/php5/apache2/php.ini )

/etc/init.d/apache2 restart

EDIT AGAIN: since you're importing big files you may need to change the timeout for processing them. In my case, the file named, "config.default.php" was found at /usr/share/phpmyadmin/libraries/config.default.php with the variable $cfg['ExecTimeLimit'] = 300; I changed mine to 900 for a huge import, for instance. Afterward you need to restart apache

Cosmism answered 25/7, 2017 at 20:39 Comment(0)
S
7

I had the same problem. I have tried three ways that were usually suggested:

  1. functions.php
  2. php.ini
  3. .htaccess

none if which solved my problem. I am using godaddy and came across a suggested solution which was:

  1. got to Web Hosting, then Manage
  2. Under Software select Select PHP version
  3. Select Switch to PHP Options found on the top right corner of the table in font color: blue
  4. On the bottom most part, you'll probably have upload_max_filesize = 2M
  5. Now, feel free to change it
  6. Be sure to click the Save button!
  7. Now go to your wp-admin panel, select Media then Add

Voila! Now you have a different max upload file size :)

Sebiferous answered 5/4, 2017 at 16:31 Comment(0)
B
6

Well, I would like to add my 2 cents here.

I'm using shared webhosting and I tackled this problem many times, tried to resolve it on my own but to no avail. Finally I managed to resolve it through checking various web sources and contacting my hosting service provider. My questions were "How can I change php value memory_limit in shared webhosting?", "How can I change php value upload_max_filesize in shared webhosting?", "How can I change php value max_input_vars in shared webhosting?", "How can I change php value max_execution_time in shared webhosting?", "How can I change php value max_input_time in shared webhosting?" and many more by configuring or changing php.ini or .htaccess file. I tried to change them but problems arose. Finally I contacted my hosting provider, and it turns out that I set my php to native, they changed it to php 5.6, here is their answer:

"Your PHP was set to 'native' mode which means you can't override those values. I've changed you to just '5.6' so you should be good to go."

After that I connected my website through ftp Filezilla, also don't forget to make both your ftp service to show hidden files, and your local computer to do so, because .htaccess file was hidden in my local laptop and in my website. It was available in public_html folder, I just downloaded it and added the following codes to the end of the file and then uploaded it back to the server:

php_value memory_limit 256M
php_value post_max_size 256M
php_value upload_max_filesize 64M
php_value max_input_vars 1800
php_value max_execution_time 300
php_value max_input_time 300

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

Everything is working properly for the time being, if any of you overcome with some problems please write here and warn me so that I can change the above-shown codes. By the way, I also upload some pictures which shows the change.

One more thing I almost forgot to mention ZipArchive installation on your shared webhosting service, I managed that requirement to tick by just going to php settings through my cpanel, click on php selector extensions and then tick zip section, that's all.

Thanks.

PS: I'm open to good practices, and if you see any bad practice here please let me know, I'll try to change them. Thanks.

Bounteous answered 3/2, 2017 at 1:50 Comment(0)
O
4

Existing answers all have partial solutions so here is the compiled answer:

Solution 1: Edit .htaccess file Suitable for Apache servers

php_value upload_max_filesize 128M
php_value post_max_size 132M
php_value memory_limit 256M
php_value max_execution_time 300
php_value max_input_time 300

Solution 2: Edit wp-config.php file Suitable for Wordpress application

@ini_set( 'upload_max_filesize' , '128M' );
@ini_set( 'post_max_size', '132M');
@ini_set( 'memory_limit', '256M' );
@ini_set( 'max_execution_time', '300' );
@ini_set( 'max_input_time', '300' );

Solution 3: Edit php.ini file Suitable for nginx servers or where php.ini is modifiable

upload_max_filesize = 128M
post_max_size = 132M
memory_limit = 256M
max_execution_time = 300
max_input_time = 300

Optional: Nginx Server
For nginx increase maximum file upload size limit (default 1MB) by adding client_max_body_size 128M; directive in http or server block.]

Important Explanation of the settings:

  • upload_max_filesize – set this to a value > than your file size
  • post_max_size – set this to a value > than your upload_max_filesize because overall size of the posted fields may be higher than the filesize
  • memory_limit – set this to a value > than your file size because it limits the maximum amount of memory a script may consume
  • max_execution_time – Maximum execution time of each script, in seconds. Set this to 0 (infinite) if your script requires long time to process file
  • max_input_time - Maximum amount of time each script may spend parsing request data. Default is 60 seconds. Set this to -1 if scripts requires more time

And finally don't forget to restart your server. Apply below what is suitable for you:

# if php-fpm is used for processing php
sudo service php7.4-fpm restart

# for nginx
sudo service nginx restart

# for apache
sudo service httpd restart
Oversexed answered 20/4, 2022 at 7:19 Comment(0)
H
3

Non of those solutions work for me!! (already set to 32M by default).The problem is in most case max_allowed_packet

I am working on localhost and using MAMP.

Here is solutions;

1. If you don't have my.ini

Add

--max_allowed_packet=168435456

To

...\MAMP\bin\startMysql.sh

2. If you have my.ini

Under

[mysqld]

Add

max_allowed_packet=100M

DONE!

Hathor answered 8/12, 2014 at 15:19 Comment(1)
Added max_allowed_packet = 128M to both php.ini and .user.ini and that did it for me!Iceberg
G
3

With WAMP it's all pretty easy

WAMP Icon > PHP > PHP Settings > upload_max_filesize = nM > n = (2M, 4M, 8M, 16M, 32M, 64M, 128M, 256M, 512M, or Choose (custom)).

Service(s) reload automatically.

But, if you truly have no access to the server, you might want to explore writing a chunking API.

Here is an image on how to do it.

enter image description here

Georgianngeorgianna answered 13/4, 2019 at 11:15 Comment(0)
T
3

As changing globally is somewhat risky, I was trying to increase max upload value for a single script big_file_upload.php. For some reason ini_set didn't help. After some reasearch I've come up with this. Put it in .htaccess (unless name changed via AccessFileName)

<If "%{REQUEST_URI} == '/subfolder/big_file_upload.php'" >
php_value upload_max_filesize 200M
php_value post_max_size 200M
</If>
<Else>
php_value upload_max_filesize 1M
php_value post_max_size 1M
</Else>

Worked for me.

Tache answered 1/4, 2020 at 21:28 Comment(0)
S
2

Three things you need to check.

upload_max_filesize, memory_limit and post_max_size in the php.ini configuration file exactly.

All of these three settings limit the maximum size of data that can be submitted and handled by PHP.

Typically post_max_size and memory_limit need to be larger than upload_max_filesize.


So three variables total you need to check to be absolutely sure.

Sturm answered 23/2, 2017 at 20:7 Comment(0)
L
2

I also had this issue, and fixed it by setting this setting in /etc/nginx/nginx.conf

client_max_body_size 0;

0, as in unlimited.

And also, if you have a reverse proxy running with nginx, that server should also have this setting (This is what threw me off here)

Listed answered 4/1, 2020 at 7:55 Comment(0)
K
2

If you edited the right php.ini file, restarted Apache or Nginx and still doesn't work, then you have to restart php-fpm too:

sudo service php-fpm restart 
Kweilin answered 21/2, 2020 at 10:18 Comment(0)
D
1

I know there is many answers on this questions but in php.ini mostly following variable are only useful to change with maximum upload file size

since sometime user updates the max file size but didnt updated the memory limit so that cause to break the import process.

so here i list all related variables that are required to be changed along with maximum file size

  • max_execution_time
  • memory_limit
  • display_errors
  • post_max_size
  • upload_max_filesize
  • max_input_time

Note : And from now the ini stored in folder something like this
/etc/php/8.1/apache2/php.ini

Doodle answered 13/12, 2022 at 10:11 Comment(0)
H
0
  1. Open the php.ini file.

  2. Search keyword like upload_max_filesize in php.ini.

  3. Then change the size of file.

    upload_max_filesize = 400M

  4. Need to change the max post value.

    post_max_size = 400M

Hegumen answered 26/1, 2021 at 11:11 Comment(0)
L
0

After spending hours, I went through almost all the posts but no luck. And finally resolved the issue with these steps. This might be weird solution but worked for me.

Step 1: find php.ini file in /etc folder or / folder by running below cmd:

grep -rl "post_max_size" | xargs ls -lrth

Here I have used the post_max_size keyword to search the "php.ini" file in /etc folder ,but in some systems you can find this on /var/www/html or /var/www/wordpress folders.

We have multiple posts on the internet as if the php.ini file is not present in the WordPress folder then you can create but in my case that doesn't work.

Step 2:

Edit php.ini file and change the value like this.

post_max_size = 100M   
upload_max_filesize = 100M

In the above you can set any value as per your requirement.

Step 3:

Restart the httpd or Nginx or apache and PHP service, or as per setup, you can restart the web service.

For me httpd and php-fpm service restart worked in centos 8 :

service httpd restart
service php-fpm restart
Limbic answered 22/7, 2021 at 17:55 Comment(0)
R
0

you have to find the where is php installed you will see the php.ini file

just open that file into any editor and replace th value

max_file_upload : 2M

Rant answered 9/10, 2021 at 10:8 Comment(0)
T
0

First Option: Use this option in case you have permission to edit the php.ini file.

The upload_max_filesize and the post_max_size settings in the php.ini need to changed to support larger files than the php default allowed size.

set upload_max_filesize to the maximum size of file which need to be uploaded.

post_max_size should be set to greater than upload_max_filesize to handle the file and the size of form post variables part of file upload form. In case multiple files are uploaded in the file upload form at a time, the post_max_size should be set to (upload_max_filesize * no of files)+ size of post variables.

upload_max_filesize=30M
post_max_size=31M

No need to update memory_limit and max_execution_time php settings, in case file is just moved using the move_uploaded_file to the final path in file upload php script. But if the file upload script is processing the file or reading the file to a variable or doing any other processing which use memory and time etc, memory_limit and max_execution_time should be set.

Set memory_limit to amount of memory needed for the php script to run and max_execution_time to the time in seconds required to run the script.

memory_limit = 100M
max_execution_time = 120

Restart the webserver after the php.ini is changed for it to take effect.

Second Option: Use this option in case you do not have permission to update the global php.ini settings or to improve security.

Copy the upload php scripts to a new Child folder say "Upload" and create a file ".user.ini" in the new folder. Also make sure to update the file upload form action attribute to post to the new Script under the "Upload" Folder.

Add below settings to the newly created file. ".user.ini".

upload_max_filesize=30M
post_max_size=31M

;below are optional
memory_limit = 100M
max_execution_time = 120

"user_ini.filename" php.ini setting can updated to give the user setting file another name.

This option improves the security as the upload_max_filesize, post_max_size,memory_limit, max_execution_time are changed only for the scripts in the new folder and will not impact php settings for scripts in other folders and prevents any unwanted resource utilization by bad scripts.

Please refer below links for more information on ".user.ini" settings

https://www.php.net/manual/en/configuration.changes.modes.php

https://www.php.net/manual/en/ini.list.php

https://www.php.net/manual/en/configuration.file.per-user.php

Restart the webserver for the new .user.ini changes to take effect.

Note:

The memory_limit and max_execution_time setting can also be set in the php upload script using ini_set and set_time_limit function instead of updating php.ini file .

If this option is used, not need to update the memory_limit and max_execution_time setting in the ini file.

Add below to the top of the php file upload script

ini_set('memory_limit', '100M');
set_time_limit(120);
Transient answered 25/5, 2022 at 11:44 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.