Changing upload_max_filesize on PHP
Asked Answered
S

11

101

I'm using PHP 5.3.0 and have encountered something that might be a bug (in which case I'll report it) or might be me - so I'm asking to make sure.

When running this code:

<?php
ini_set('upload_max_filesize', '10M');
echo ini_get('upload_max_filesize'), ", " , ini_get('post_max_size')

I end up with:

2M, 8M

This is despite my php.ini setting these higher:

upload_max_filesize = 10M
post_max_size = 10M

(occuring only once)

Because the error occurs after setting the value as well as it being set in php.ini I'm inclined to think it's a bug. Can anyone confirm or point me where I'm going wrong?

Update: Looks like restarting Apache fixed this - I always thought it didn't need to be restarted if you changed php.ini.

Salivation answered 13/7, 2009 at 22:22 Comment(3)
"I always thought it didn't need to be restarted if you changed php.ini." PHP CLI picks up changes immediately, because it parses php.ini with every invocation. mod_php parses php.ini once -- when apache starts up.Carolyn
I had the same problem recently. upload_max_filesize wouldn't get into effect without restarting Apache. I'm on a PHP 5.2.9. After the restart everything is working okay.Righteousness
To avoid a full apache restart, just use "sudo service apache2 reload"Immune
T
83

You can't use shorthand notation to set configuration values outside of PHP.ini. I assume it's falling back to 2MB as the compiled default when confronted with a bad value.

On the other hand, I don't think upload_max_filesize could be set using ini_set(). The "official" list states that it is PHP_INI_PERDIR .

Totalitarian answered 13/7, 2009 at 22:28 Comment(2)
You think right! You can't set upload_max_filesize using ini_set() because upload_max_filesize is a PHP_INI_PERDIR type that means changeable only via: php.ini, .htaccess or httpd.conf as stated at: php.net/manual/en/configuration.changes.modes.phpBackler
Actually, you can use shorthand notation outside of PHP.ini; you can use it in .htaccess and also with ini_set. Maybe not in all versions, though.Chelyabinsk
B
80

Are you using a shared hosting provider? It could be master settings overriding anything you're trying to change. Have you tried adding those into your .htaccess?

php_value upload_max_filesize 10M
php_value post_max_size 10M
Beberg answered 13/7, 2009 at 22:27 Comment(6)
No, this is my own Apache/PHP instance on my machine (which is Windows if it's relevant). I'll try adding those to the Apache config.Salivation
Update: This does affect it (changes them to 10) so this method works. I'm still quite confused as to why it's not working in php.ini or using ini_set.Salivation
+1 this is definitely the way to go if you can't get to php.ini - thank you very much.Ganglion
Note this only works with Apache running PHP as Module, not as CGIDieball
I would say this is the preferred method even with access to the php.ini file. Allows you to set these permissions based on need rather than as a global setting.Polymeric
This not works for me, and I can't override the master configuration of my free hosting service, at least for my domain.Curcuma
E
48

Since I just ran in to this problem on a shared host and was unable to add the values to my .htaccess file I thought I'd share my solution.

I made an ini file with the values in it. Simple as that:

Make a file called ".user.ini" and add your values

upload_max_filesize = 150M
post_max_size = 150M

Boom, problem solved.

Exsanguine answered 14/3, 2015 at 1:25 Comment(6)
"In addition to the main php.ini file, PHP scans for INI files in each directory, starting with the directory of the requested PHP file, and working its way up to the current document root." php.net/manual/en/configuration.file.per-user.phpWithdrawal
Works great with a wordpress site! Thanks!Anthracnose
This worked great as I'm unable to do it from .htaccess. Thanks man!Degenerate
PHP by default re-read user.ini file every 5 minutes. So be patient if the result does not appear immediatelyMillisent
Im unable to set this higher than 150M, is this normal?Sharpedged
@ParsaYazdani I think because value is set / limited in an upper level, like a general .ini file.Cromer
K
14

I got this to work using a .user.ini file in the same directory as my index.php script that loads my app. Here are the contents:

upload_max_filesize = "20M"
post_max_size = "25M"

This is the recommended solution for Heroku.

Kaitlynkaitlynn answered 12/1, 2015 at 22:17 Comment(0)
P
7

This can also be controlled with the apache configuration. Check the httpd.conf and/or .htaccess for something like the following:

php_value upload_max_filesize 10M
Photojournalism answered 13/7, 2009 at 22:28 Comment(0)
E
1

Please be advised that setting a large post_max_size or upload_max_filesize for a complete server or a complete virtual host is not a good idea as it may lead to increased security risks.

The risk is that an attacker may send very large POST requests and overloading your server memory and CPU as it has to parse and process those requests before handling them to your PHP script.

So it's best to limit changing this setting to some files or directories. For example if I want to /admin/files/ and /admin/images/ I can use:

<If "%{REQUEST_URI} =~ m!^/admin/(files|images)/! && -n %{HTTP_COOKIE}">
    php_value post_max_size 256M
    php_value upload_max_filesize 256M
</If>

I also require the request to have a cookie to avoid basic attacks. This will not protect you against attacks coming from non-authenticated users, but may delay any attack.

This setting can be used in Apache server configuration files, and .htaccess files as well.

Elfrieda answered 14/9, 2022 at 20:59 Comment(0)
L
0

If you are running in a local server, such as wamp or xampp, make sure it's using the php.ini you think it is. These servers usually default to a php.ini that's not in your html docs folder.

Laurentium answered 19/4, 2013 at 21:54 Comment(0)
S
0

I've faced the same problem , but I found out that not all the configuration settings could be set using ini_set() function , check this Where a configuration setting may be set

Smilacaceous answered 18/5, 2015 at 19:28 Comment(0)
E
-1

if you use ini_set on the fly then you will find here http://php.net/manual/en/ini.core.php the information that e.g. upload_max_filesize and post_max_size is not changeable on the fly (PHP_INI_PERDIR).

Only a php.ini, .htaccess or vhost config change seems to change these variables.

Estancia answered 31/5, 2012 at 13:13 Comment(0)
A
-2

This solution can be applied only if the issue is on a WordPress installation!

If you don't have FTP access or too lazy to edit files,

You can use Increase Maximum Upload File Size plugin to increase the maximum upload file size.

Abstinence answered 31/10, 2019 at 6:19 Comment(0)
C
-13

You can use also in the php file like this

<?php ini_set('upload_max_filesize', '200M'); ?>
Claudette answered 7/6, 2013 at 9:43 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.