How can I create separate configuration files for php (cli) and php-fpm on an arch linux

I have found a few tweaks to solve my problem.

First: load a separate php.ini files:

A user in a arch linux forum posted this from the man php page:

FILES
   php-cli.ini    The configuration file for the CLI version of PHP.

   php.ini        The standard configuration file will only be used when php-cli.ini cannot be found.

If I creating a /etc/php/php-cli.ini file only this file will be loaded and not /etc/php/php.ini with the php cli command. php-fpm is still loading the /etc/php/php.ini.

Second: load different module configurations:

I have found in the php documentation the PHP_INI_SCAN_DIR environment variable. Therefore I have moved the /usr/lib/systemd/system/php-fpm.service file to /etc/systemd/system/php-fpm.service and added the following configuration to the service file:

[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target

[Service]
Type=notify
Environment="PHP_INI_SCAN_DIR=/etc/php/fpm/conf.d" ; <-- I have added this line
PIDFile=/run/php-fpm/php-fpm.pid
ExecStart=/usr/bin/php-fpm --nodaemonize --fpm-config /etc/php/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

After restarting/reloading the services, php-fpm loads only the files from /etc/php/fpm/conf.d and no longer from /etc/php/conf.d. This allows me to configure cli and fpm separately.

Perhaps this is not the best solution but I fits to my usecase. If everyone have a better solution, don't hesitate to post your answer!


You can always do this for the cli version:

php -c /path/to/your/php.ini

and leave the defaults with the ones served over php-fpm. Or even better, add this to your login scripts

# ~/.bashrc
# aliases and personal functions

# PHP source personal ini
alias php='php -c /path/to/your/php.ini'

# colorize ls
alias ls='ls --color'
...

It would have been better if you had stated which version(s) you are using