Bug #74123 [Opn]: php command-line -c ini settings overridden by default .ini
| From: | dean at omnivisiontechnology dot com | Date: | Tue, 21 Feb 2017 12:19:21 +0000 |
| Subject: | Bug #74123 [Opn]: php command-line -c ini settings overridden by default .ini | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-207486@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=74123&edit=1
ID: 74123
User updated by: dean at omnivisiontechnology dot com
Reported by: dean at omnivisiontechnology dot com
Summary: php command-line -c ini settings overridden by
default .ini
Status: Open
Type: Bug
Package: PHP options/info functions
Operating System: Linux
-PHP Version: 7.0.16
+PHP Version: 7
Block user comment: N
Private report: N
New Comment:
I've re-read the docs for how PHP finds .ini files:
https://secure.php.net/manual/en/configuration.file.php
...and if I understand correctly, the .ini files specified using --with-config-file-path and
--with-config-file-scan-dir are applied *AFTER* the .ini file specified with -c on the command line.
If this is by design, then I guess I'm not reporting a bug, as such. However, it seems this is
very badly designed: Both to make it useful, and to conform to the principle of least surprise, the
-c specified .ini file should be applied *LAST*, so that it overrides all other settings.
As it stands, the -c supplied settings are overridden by all the default .ini files PHP will scan,
so (unless you also use -n) the only thing you can do with -c is add new setting options that
AREN'T SET AT ALL in any of the default .ini's.
Is this just a really bad historical design choice that can't be changed without breaking
backward compatibility, or is there some reason it has to work this way?
And, would it be possible to add another command line option that works just like -c, except that
the specified .ini file is processed LAST (and hence overrides ANY other settings?)
Previous Comments:
------------------------------------------------------------------------
[2017-02-18 09:59:01] dean at omnivisiontechnology dot com
Description:
------------
The expectation when using PHP from the command line with the -c <my_ini_file> switch is that
the settings in <my_ini_file> should take priority over those in the default ini file (as
defined by compile-time configuration options --with-config-file-path and --sysconfdir).
Somewhere from moving from v5.x to v7.1.1, this appears to have broken, with the default ini
settings overriding the command-line ones.
Test script:
---------------
My server's default php.ini is located at /opt/cpanel/ea-php71/root/etc/php.ini
It contains (amongst other things) the lines:
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
error_log = "/home/myusername/public_html/admin/PHP_ERROR_LOG.TXT"
Whereas, I have another .ini located at /home/myusername/DB_BACKUP_SCRIPT/cron_php.ini
That one contains(amongst other things) the lines:
error_reporting = E_ALL
error_log = "/home/myusername/DB_BACKUP_SCRIPT/DB_BACKUP_ERROR_LOG.TXT"
When I execute: php -c /home/myusername/DB_BACKUP_SCRIPT/cron_php.ini -i
The output includes the following:
-------------------------------
System => Linux myserver.com 3.10.0-327.28.2.el7.x86_64 #1 SMP Wed Aug 3 11:11:39 UTC 2016 x86_64
Build Date => Jan 25 2017 04:20:53
Configure Command => './configure' '--build=x86_64-redhat-linux-gnu'
'--host=x86_64-redhat-linux-gnu' '--program-prefix='
'--disable-dependency-tracking' '--prefix=/opt/cpanel/ea-php71/root/usr'
'--exec-prefix=/opt/cpanel/ea-php71/root/usr'
'--bindir=/opt/cpanel/ea-php71/root/usr/bin'
'--sbindir=/opt/cpanel/ea-php71/root/usr/sbin'
'--sysconfdir=/opt/cpanel/ea-php71/root/etc'
'--datadir=/opt/cpanel/ea-php71/root/usr/share'
'--includedir=/opt/cpanel/ea-php71/root/usr/include'
'--libdir=/opt/cpanel/ea-php71/root/usr/lib64'
'--libexecdir=/opt/cpanel/ea-php71/root/usr/libexec'
'--localstatedir=/opt/cpanel/ea-php71/root/usr/var'
'--sharedstatedir=/opt/cpanel/ea-php71/root/usr/com'
'--mandir=/opt/cpanel/ea-php71/root/usr/share/man'
'--infodir=/opt/cpanel/ea-php71/root/usr/share/info'
'--cache-file=../config.cache' '--with-libdir=lib64'
'--with-config-file-path=/opt/cpanel/ea-php71/root/etc'
'--with-config-file-scan-dir=/opt/cpanel/ea-php71/root/etc/php.d'
'--disable-debug' '--wit!
h-pic' '--without-pear' '--with-bz2' '--with-freetype-dir=/usr'
'--with-png-dir=/usr' '--with-xpm-dir=/usr' '--enable-gd-native-ttf'
'--without-gdbm' '--with-gettext' '--with-iconv'
'--with-jpeg-dir=/usr' '--with-openssl' '--with-pcre-regex=/usr'
'--with-zlib' '--with-layout=GNU' '--enable-exif'
'--enable-ftp' '--enable-sockets' '--with-kerberos'
'--enable-shmop' '--with-libxml-dir=/usr' '--with-system-tzdata'
'--with-mhash' '--enable-dtrace'
'--libdir=/opt/cpanel/ea-php71/root/usr/lib64/php' '--enable-pcntl'
'--enable-opcache' '--disable-opcache-file' '--enable-phpdbg'
'--with-imap=shared,/opt/cpanel/ea-php71/root/usr' '--with-imap-ssl'
'--enable-mbstring=shared' '--enable-mbregex' '--with-webp-dir=/usr'
'--with-gd=shared' '--with-gmp=shared' '--enable-calendar=shared'
'--enable-bcmath=shared' '--with-bz2=shared' '--enable-ctype=shared'
'--enable-dba=shared' '--with-db4=/usr' '--with-tcadb=/usr'
'--enable-exif=shared' '--enable-ftp=shared' '--with-gettext=shared'
'--with-i!
conv=shared' '--enable-sockets=shared' '--enable-tokenizer=sha!
red' '--with-xmlrpc=shared' '--with-ldap=shared'
'--with-ldap-sasl' '--enable-mysqlnd=shared'
'--with-mysqli=shared,mysqlnd' '--with-mysql-sock=/var/lib/mysql/mysql.sock'
'--enable-dom=shared' '--with-pgsql=shared'
'--enable-simplexml=shared' '--enable-xml=shared'
'--enable-wddx=shared' '--with-snmp=shared,/usr'
'--enable-soap=shared' '--with-xsl=shared,/usr'
'--enable-xmlreader=shared' '--enable-xmlwriter=shared'
'--with-curl=shared,/usr' '--enable-pdo=shared'
'--with-pdo-odbc=shared,unixODBC,/usr' '--with-pdo-mysql=shared,mysqlnd'
'--with-pdo-pgsql=shared,/usr' '--with-pdo-sqlite=shared,/usr'
'--with-sqlite3=shared,/usr' '--enable-json=shared'
'--enable-zip=shared' '--without-readline' '--with-libedit'
'--with-pspell=shared' '--enable-phar=shared'
'--with-mcrypt=shared,/opt/cpanel/libmcrypt' '--enable-sysvmsg=shared'
'--enable-sysvshm=shared' '--enable-sysvsem=shared'
'--enable-shmop=shared' '--enable-posix=shared'
'--with-unixODBC=shared,/usr' '--enable-intl=shared' '--w!
ith-icu-dir=/usr' '--with-enchant=shared,/usr' '--with-recode=shared,/usr'
'--enable-fileinfo=shared' 'build_alias=x86_64-redhat-linux-gnu'
'host_alias=x86_64-redhat-linux-gnu' 'CFLAGS=-O2 -g -pipe -Wall
-Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4
-grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic
-fno-strict-aliasing -Wno-pointer-sign' 'CXXFLAGS=-O2 -g -pipe -Wall
-Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4
-grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic'
Server API => Command Line Interface
Virtual Directory Support => disabled
Configuration File (php.ini) Path => /opt/cpanel/ea-php71/root/etc
Loaded Configuration File => /home/myusername/DB_BACKUP_SCRIPT/cron_php.ini
.
.
.
PHP Version => 7.1.1
Directive => Local Value => Master Value
error_log => /home/myusername/public_html/admin/PHP_ERROR_LOG.TXT =>
/home/myusername/public_html/admin/PHP_ERROR_LOG.TXT
error_reporting => 22519 => 22519
---------------------------------
Expected result:
----------------
As can be seen, the error_log and error_reporting values are those from the default configuration
.ini file, and NOT the .ini file passed to the -c command line switch, as they should be.
Before switching to PHP v7.x, this was working correctly.
Note that including the -n command line switch as well fixes this specific problem, but
(predictably) causes lots of others (i.e. no DB, graphics, curl, etc. library functions work any
more, since they don't get initialized properly). This shows though, that both .ini files are
being processed, just that settings from the wrong one are taking precedence!
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=74123&edit=1