ID: 44801 User updated by: twm at twmacinta dot com Reported By: twm at twmacinta dot com -Status: Feedback +Status: Open Bug Type: CGI related Operating System: Red Hat Enterprise Linux ES 3 PHP Version: 5.2.5 Assigned To: fb-req-jani New Comment:
OK, that's the problem. But given that it is the problem, the test script "bug22414.phpt", which is part of "make test", is bound to fail any time safe mode is compiled in. It makes nested calls to the PHP binary with the "-n" option, which apparently causes safe mode to be turned on since it ignores the test script's custom "php.ini" in that case. So in that respect, maybe this is a bug in "bug22414.phpt"? I'd like to suggest that the manual be annotated to reflect the changing behavior of the safe mode default. Currently, http://www.php.net/manual/en/ini.php says that default value for "safe_mode" in "php.ini" is 0. There is no mention that the default changes depending on how the binary was compiled. In fact, I had assumed that the default of 0 only applied when safe mode was compiled into the binary since it would be meaningless otherwise. This page on safe mode also indicates that the safe mode features aren't applied to command line scripts. http://www.php.net/manual/en/features.safe-mode.php says "Warning: These PHP restrictions are not valid in executed binaries, of course." That's doesn't seem entirely correct given that it was affecting passthru() in the command line scripts referenced in this bug. Previous Comments: ------------------------------------------------------------------------ [2008-04-25 16:29:04] [EMAIL PROTECTED] Using --enable-safe-mode makes the default be "on". (without this configure option it defaults to "off"). And in the manual it is mentioned that: "Warning: With safe mode enabled, the command string is escaped with escapeshellcmd(). Thus, echo y | echo x becomes echo y \| echo x." The question remains: Did you really turn off safe-mode in php.ini and was it really turned off? (check with phpinfo()) ------------------------------------------------------------------------ [2008-04-24 19:48:19] twm at twmacinta dot com Aha, that set off a spark. I think I found something useful... The test script actually worked when I tried this: ./configure --disable-all --disable-cgi Then, I tried no flags at all, and it still worked: ./configure So I went through all of the flags I used originally and discovered that the problem appears when all I add is the safe-mode flag: ./configure --enable-safe-mode Here's the output: ---- Before: 'Tim'\''s Test' After: sh: line 1: /usr/local/php/bin/echo: No such file or directory ---- Note that it was looking for "echo" at a different path. When I created the directory that it was looking for and copied "echo" there, then I got the same incorrect output as before: ---- Before: 'Tim'\''s Test' After: Tim\s Test' ---- So the problem occurs when safe-mode is compiled into the executable even though I am not using safe mode when running the script. I'm using "php -n" which should avoid safe mode (right?) and my "php.ini" also turns safe mode off. I checked the other versions of PHP which I reported on earlier, and the versions which behaved incorrectly had safe mode compiled in but turned off, and those that behaved correctly did not have safe mode compiled in at all. ------------------------------------------------------------------------ [2008-04-24 18:01:39] [EMAIL PROTECTED] Can you try with this instead: # rm -f config.cache # ./configure --disable-all --disable-cgi ie. Eliminate everything but the core. :) ------------------------------------------------------------------------ [2008-04-24 17:52:47] twm at twmacinta dot com I was actually using the "-n" flag from the start, so that moving part was already eliminated. Here are my "./configure" and "make install" commands: ---- CONF_OLD_PREFIX=/usr CONF_PREFIX=/var/tmp2/php5_take2/targ CONF_SYSCONFDIR=${CONF_PREFIX}/etc CONF_BINDIR=${CONF_PREFIX}/bin ./configure \ --prefix=${CONF_PREFIX} \ --with-config-file-path=${CONF_SYSCONFDIR} \ --enable-force-cgi-redirect \ --enable-fastcgi \ --disable-debug \ --enable-pic \ --disable-rpath \ --enable-inline-optimization \ --with-bz2 \ --with-curl \ --with-dom=${CONF_PREFIX} \ --with-exec-dir=${CONF_BINDIR} \ --with-freetype-dir=${CONF_PREFIX} \ --with-png-dir=${CONF_PREFIX} \ --with-gd \ --enable-gd-native-ttf \ --with-ttf \ --with-gdbm \ --with-gettext \ --with-db4 \ --with-ncurses \ --with-gmp \ --with-iconv \ --with-jpeg-dir=${CONF_PREFIX} \ --with-mm \ --with-openssl \ --with-png \ --with-pspell \ --with-regex=system \ --with-xml \ --with-domxml \ --with-expat-dir=${CONF_PREFIX} \ --with-zlib \ --with-layout=GNU \ --enable-mcal \ --enable-bcmath \ --enable-debugger \ --enable-exif \ --enable-ftp \ --enable-magic-quotes \ --enable-safe-mode \ --enable-sockets \ --enable-sysvsem \ --enable-sysvshm \ --enable-discard-path \ --enable-track-vars \ --enable-trans-sid \ --enable-yp \ --enable-wddx \ --without-oci8 \ --with-imap=shared \ --with-mcrypt \ --with-imap-ssl \ --with-kerberos=/usr/kerberos \ --with-ldap=shared \ --with-mysql=shared,${CONF_PREFIX} \ --with-pgsql=shared \ --with-snmp=shared,${CONF_PREFIX} \ --with-snmp=shared \ --enable-net-snmp-hack \ --with-unixODBC=shared,${CONF_OLD_PREFIX} \ --enable-memory-limit \ --enable-bcmath \ --enable-shmop \ --enable-versioning \ --enable-calendar \ --enable-dbx \ --enable-dio \ --enable-mbstring \ --enable-mbstr-enc-trans make install INSTALL_ROOT=/var/tmp2/php5_take2/targ ------------------------------------------------------------------------ [2008-04-24 17:44:49] [EMAIL PROTECTED] Next obvious question is: How did you build PHP? ie. What configure line, etc. Also to eliminate every last moving parts: run the script like this: # php -n script.php ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/44801 -- Edit this bug report at http://bugs.php.net/?id=44801&edit=1