ID: 33495 Updated by: [EMAIL PROTECTED] Reported By: jsheets at idahoimageworks dot com -Status: Open +Status: Bogus Bug Type: Scripting Engine problem Operating System: FreeBSD PHP Version: 5CVS-2005-06-27 (dev) New Comment:
It's actually a bug fix that "breaks" this. Where in the manual does it say that you can pass something else than variables by reference? Previous Comments: ------------------------------------------------------------------------ [2005-06-28 01:40:37] jsheets at idahoimageworks dot com Hi Tony, This actually is a defect, the behavior has changed from previous versions of PHP including 4.X and 5.0.X and PHP 5.1 BETA #1 in a non backwards compatability way that will break existing scripts. The script has worked properly with all versions of PHP since before PHP 4.1, it stands to reason that you should be able to execute scripts that that work with PHP 5.04 in PHP 5.1. It is interesting that the behavior changed in such a way that it breaks the script in beta 2 where beta 1 and previous works as expected. Obviously backwards compatability is important for PHP and if it randomly decides to break backwards compatability it will be very difficult to continue to sell in enterprise environments. ------------------------------------------------------------------------ [2005-06-27 22:02:34] [EMAIL PROTECTED] Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php The error message is quite informative, isn't it ? array_shift() modifies specified variable and "explode('.', 'file.txt')" is definitely not a variable, but an expression. ------------------------------------------------------------------------ [2005-06-27 21:16:37] jsheets at idahoimageworks dot com Description: ------------ Starting with PHP 5.1 beta #2 PHP dies with a PHP Configuration: './configure' '--with-apxs2=/usr/local/apache2/bin/apxs' '--with-pgsql=/usr/local/pgsql''--enable-ftp' '--with-zlib-dir=/usr' '--with-config-file-path=/usr/local/apache2/conf' '--with-jpeg-dir=/usr/local' PHP Versions: 5.1 BETA #2 and PHP 5.1 latest CVS Reproduce code: --------------- /** * Returns the part of the filename before the . * @param string $file * @return string */ function GetBaseName($file) { if (empty($file)) { return false; } // simplified, $file replaced with file.txt return array_shift(explode('.', 'file.txt'))); } Expected result: ---------------- The expected result is that PHP returns the portion of the filename before the ., Actual result: -------------- Results in Fatal error: Only variables can be passed by reference Error seems to have been introduced between beta 5.1 beta #1 and #2, it works in PHP 4 as well as PHP 5.0.x and PHP 5.1 beta #1 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=33495&edit=1