Is there a php (or composer) terminal command to change the php.ini variables upload_max_filesize and post_max_size from terminal to some value directly from terminal, without sed or awk operations?

The reason; having a more a version-agnostic and more backward-compatible directive in my server-environment-establishment script, to change the values of these two variables.


If I'm not wrong utilizing the confd CM (supported in PHP >= 5.0) should be good (I can't test right now):

1. Create something like /etc/php7/conf.d/local.ini.

2. Add to it:

upload_max_filesize = 2000M
post_max_size = 2000M
  • Change them in your php application with ini_set ? – Tensibai Nov 20 '18 at 12:51
  • Do not use ini_set! – Kyslik Nov 29 '18 at 9:44

The reason; having a more a version-agnostic and more backward-compatible directive in my server-environment-establishment script, to change the values of these two variables.

If you're trying to configure a server, you should use a configuration management system (Ansible, Puppet, Chef, Salt) or bake images for immutable infrastructure; trying to hack in pieces of configuration via PHP or bash or whatever will just make you unhappy.

  • I am sorry Xiong but it seems Ansible (which is helpful in so much) isn't very helpful in this particular case please look: unix.stackexchange.com/questions/489281/… – JohnDoea Dec 17 '18 at 7:14
  • There isn't an Ansible module to change just that value, but I would throw the entire php.ini in a jinja template; you'll want to control it all anyways. – Xiong Chiamiov Dec 18 '18 at 6:49
  • Oh curd, I linked to the answer instead to the question (which I'm sure you've seen)... Anyways, I have no idea what's a jinja template. If you have the spare time and will, I'll appreciate a short answer there - it would be helpful indeed... – JohnDoea Dec 18 '18 at 7:13

PHP has supported conf.d configuration subdirectories for ages now (cf. PHP_INI_SCAN_DIR in its documentation, this stuff is as old as PHP 5 basically) - allowing you to simply add a small file containing just the snippet of config you need in there, and as long as you make sure it's named so that it's ordered in a way it overrides the defaults, you're done.

IOW you don't go searching for an existing value to fiddle with, you just add your own.

  • Seems a great way, but it's strange for me no one mentioned it before you (also in AskUbuntu and I never came across conf.d in Apache, only in Nginx). Are you sure you don't mean to Nginx?... Please example what you will do in Apache... – JohnDoea Nov 28 '18 at 21:53
  • 1
    These are all separate programs, all of which have their own method of including configuration subdirectories. Apache has used it with the name conf.d, before they switched to conf-available/enabled, and they effectively use the same thing with mods-available/enabled and sites-available/enabled. nginx uses it for conf.d, sites-available/enabled. php uses it for conf.d, in each of the SAPI config directories. It's actually quite widespread. There may be platform differences, though, I'm primarily referring here to Debian/Ubuntu. – Josip Rodin Nov 29 '18 at 11:20
  • Nice to know ! (I'm not a PHP programmer nor I know Apache well). I primarily use Debian Ubuntu. I upvoted your answer after this explanation as this seems promising. I encourage you to show an example of what you would have changed. Of course I'll accept this answer if it'll include a way that works for me well. – JohnDoea Nov 29 '18 at 12:57
  • Have a look at e.g. stackoverflow.com/a/34724226/4617744 – Josip Rodin Nov 29 '18 at 15:28

You can use regex and after that change, you need to restart the webserver:

sed -i 's/upload_max_filesize\s*=.*/upload_max_filesize=100M/g' path/to/php.ini
sed -i 's/post_max_size\s*=.*/post_max_size=100M/g' path/to/php.ini
sed -i 's/memory_limit\s*=.*/memory_limit=512M/g' path/to/php.ini

But it is preferable to use Configuration Management Tools

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.