Bug #73492 [Com]: PHP 5.6 ini_set no longer supports sendmail_path; must be hard-coded in php.ini

From: Date: Wed, 16 Nov 2016 20:49:07 +0000
Subject: Bug #73492 [Com]: PHP 5.6 ini_set no longer supports sendmail_path; must be hard-coded in php.ini
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-205420@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=73492&edit=1 ID: 73492 Comment by: php dot net at ii0 dot net Reported by: php dot net at ii0 dot net Summary: PHP 5.6 ini_set no longer supports sendmail_path; must be hard-coded in php.ini Status: Not a bug Type: Bug Package: PHP options/info functions Operating System: Red Hat PHP Version: 5.6.28 Assigned To: cmb Block user comment: N Private report: N New Comment: If this particular configuration setting is now only supported in php.ini, that is fine. Thank you for the link to that page of doco I obviously never found. And thank you for the idea to wrap ini_set() with an if() that could detect whether or not ini_set() was successful. Of course, by the time I finally figured out that ini_set() of sendmail_path was the culprit -- no thanks to the error log -- there was no need for such an if() wrapper. I think there should have been a note about this behavior change here: http://php.net/manual/en/mail.configuration.php#ini.sendmail-path and in the upgrade docs I was relying on: http://php.net/migration55 http://php.net/migration56 but hey. I am just happy we don't actually need it to be configured on the fly with ini_set(), and are able to use the same path for everything. Thanks again! Previous Comments: ------------------------------------------------------------------------ [2016-11-11 10:20:41] cmb@php.net sendmail_path is PHP_INI_SYSTEM at least as of PHP 4.3[1], so changing it with ini_set() shouldn't have been possible at all. That is already documented[2]. Since ini_set() signals success/failure with its return value, I don't think there needs to be an additional warning or notice. Just check its return value instead. [1] <https://github.com/php/php-src/blob/PHP-4.3/main/main.c#L359> [2] <http://php.net/manual/en/mail.configuration.php> ------------------------------------------------------------------------ [2016-11-10 22:41:41] php dot net at ii0 dot net Description: ------------ --- From manual page: http://www.php.net/function.ini-set --- Historically, we have been able to dynamically set the path to a sendmail binary: ini_set('sendmail_path','/path/to/sendmail -xyz'); and everything worked well. However, after upgrading PHP to 5.6, it seems that PHP suddenly ignores that particular setting (or quietly fails to use it) because all PHP-initiated mail totally stops working and the PHP error log gives us [a cryptic and ultimately unhelpful] error "sh: -t: command not found". Hard-coding the path in the php.ini file works fine: sendmail_path = /path/to/sendmail -xyz Fortunately for us, the dynamic setting via ini_set() is unnecessary because we only have one version of the sendmail binary and all PHP-initiated mail can use the same parameters. Hard-coding it is acceptable in our case. Whether this behavior change is a feature or a bug, it should be documented. If this is the new intentional behavior then ideally, ini_set() should raise a deprecation/warning/etc. when someone tries to use it for sendmail_path. BTW: It appears that all our other ini_set() besides sendmail_path are still working in 5.6 just as they did before. Here is the "configure" entry from phpinfo(), in case anyone finds it useful: './configure' '--prefix=/opt/lampp' '--with-apxs2=/opt/lampp/bin/apxs' '--with-config-file-path=/opt/lampp/etc' '--with-mysql=mysqlnd' '--enable-inline-optimization' '--disable-debug' '--enable-bcmath' '--enable-calendar' '--enable-ctype' '--enable-ftp' '--enable-gd-native-ttf' '--enable-magic-quotes' '--enable-shmop' '--disable-sigchild' '--enable-sysvsem' '--enable-sysvshm' '--enable-wddx' '--with-gdbm=/opt/lampp' '--with-jpeg-dir=/opt/lampp' '--with-png-dir=/opt/lampp' '--with-freetype-dir=/opt/lampp' '--with-zlib=yes' '--with-zlib-dir=/opt/lampp' '--with-openssl=/opt/lampp' '--with-xsl=/opt/lampp' '--with-ldap=/opt/lampp' '--with-gd' '--with-imap=/bitnami/xamppunixinstallerstackDev-linux-x64/src/imap-2007e' '--with-imap-ssl' '--with-gettext=/opt/lampp' '--with-mssql=shared,/opt/lampp' '--with-pdo-dblib=shared,/opt/lampp' '--with-sybase-ct=/opt/lampp' '--with-mysql-sock=/opt/lampp/var/mysql/mysql.sock' '--with-oci8=shared,instantclient,/opt/lampp/lib/instantclient' '--wit! h-mcrypt=/opt/lampp' '--with-mhash=/opt/lampp' '--enable-sockets' '--enable-mbstring=all' '--with-curl=/opt/lampp' '--enable-mbregex' '--enable-zend-multibyte' '--enable-exif' '--with-bz2=/opt/lampp' '--with-sqlite=shared,/opt/lampp' '--with-sqlite3=/opt/lampp' '--with-libxml-dir=/opt/lampp' '--enable-soap' '--with-xmlrpc' '--enable-pcntl' '--with-mysqli=mysqlnd' '--with-pgsql=shared,/opt/lampp/' '--with-iconv=/opt/lampp' '--with-pdo-mysql=mysqlnd' '--with-pdo-pgsql=/opt/lampp/postgresql' '--with-pdo_sqlite=/opt/lampp' '--with-icu-dir=/opt/lampp' '--enable-fileinfo' '--enable-phar' '--enable-zip' '--enable-intl' 'CC=gcc' 'CFLAGS=-I/opt/lampp/include/c-client '-I/opt/lampp/include/libpng' '-I/opt/lampp/include/freetype2' '-O3' '-fPIC' '-L/opt/lampp/lib' '-I/opt/lampp/include' '-I/opt/lampp/include/ncurses'' 'LDFLAGS=-Wl,--rpath '-Wl,/opt/lampp/lib' '-L/opt/lampp/lib' '-I/opt/lampp/include' '-L/opt/lampp/lib' '-L/opt/lampp'' 'CPPFLAGS=-I/opt/lampp/include/c-client '-I/opt/lam! pp/include/libpng' '-I/opt/lampp/include/freetype2' '-O3' '-fP! IC' '-L/opt/lampp/lib' '-I/opt/lampp/include' '-I/opt/lampp/include/ncurses'' 'CXX=g++' 'CXXFLAGS=-I/opt/lampp/include/c-client '-I/opt/lampp/include/libpng' '-I/opt/lampp/include/freetype2' '-I/opt/lampp/include/ncurses' '-O3' '-L/opt/lampp/lib' '-I/opt/lampp/include'' Test script: --------------- <?php // to reproduce the problem, ensure php.ini has no hard-coded sendmail_path ini_set("sendmail_path", "/usr/sbin/sendmail -t -i"); // this returns false, and "sh: -t: command not found" will appear in the error log mail( "recipient@ii0.net", "subject here", "body here", "From: sender@ii0.net\r\n" ); ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=73492&edit=1

« previous php.bugs (#205420) next »