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

Reply via email to