[php-maint] Bug#647641: Not a bug

Filipus Klutiero chealer at gmail.com
Thu Feb 9 02:38:07 UTC 2012


reopen 647641
retitle 647641 call-time pass-by-reference notice/error is generated at 
compile time
tags 647641 + upstream fixed-upstream
close 647641 5.4.0~rc7-1
thanks

Hi Ondřej,

On -28163-01--10 14:59, Ondřej Surý wrote:
> Version: 5.3.8-2
>
> This is not a bug. You set the error_reporting = E_ALL after this
> message would be printed.

The call is on line 10, after the error_reporting() call on line 6.
>
> ondrej at howl:~$ php -v
> PHP 5.3.3-7+squeeze7 with Suhosin-Patch (cli) (built: Feb  2 2012 17:32:55)
> Copyright (c) 1997-2009 The PHP Group
> Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
>
> $ php -c /usr/share/doc/php5-common/examples/php.ini-development
> /tmp/callTimeRefNoticeTest.php
> PHP Deprecated:  Call-time pass-by-reference has been deprecated; If
> you would like to pass it by reference, modify the declaration of
> foo().  If you would like to enable call-time pass-by-reference, you
> can set allow_call_time_pass_reference to true in your INI file in
> /tmp/callTimeRefNoticeTest.php on line 10
>
> Deprecated: Call-time pass-by-reference has been deprecated; If you
> would like to pass it by reference, modify the declaration of foo().
> If you would like to enable call-time pass-by-reference, you can set
> allow_call_time_pass_reference to true in your INI file in
> /tmp/callTimeRefNoticeTest.php on line 10
> PHP Deprecated:  Function split() is deprecated in
> /tmp/callTimeRefNoticeTest.php on line 11
>
> Deprecated: Function split() is deprecated in
> /tmp/callTimeRefNoticeTest.php on line 11
> DONE
>
> O.
>

Thanks for that. I re-tested and was able to reproduce your result. I 
figured out that the bug is not what I thought. The problem is that this 
is actually a compile-time notice. Therefore, the error_reporting() call 
has no effect. I am attaching a new version of the script that shows 
this more clearly. The script does 3 calls, the first at the default 
error reporting level, one with error reporting disabled and one with 
error reporting enabled. But as you can see, the notice will actually 
show 0 or 3 times:

> $ php -n callTimeRefNoticeTest.php ;php -n --define 
> 'error_reporting=E_ALL|E_STRICT' --define 
> allow_call_time_pass_reference=Off callTimeRefNoticeTest.php
> display_errors = 1
> error_reporting =
> allow_call_time_pass_reference = 1
> Array
> (
> [type] => 8192
> [message] => Function split() is deprecated
> [file] => /var/www/callTimeRefNoticeTest.php
> [line] => 22
> )
>
> Deprecated: Function split() is deprecated in 
> /var/www/callTimeRefNoticeTest.php on line 28
>
> DONE
>
> Deprecated: Call-time pass-by-reference has been deprecated; If you 
> would like to pass it by reference, modify the declaration of foo(). 
> If you would like to enable call-time pass-by-reference, you can set 
> allow_call_time_pass_reference to true in your INI file in 
> /var/www/callTimeRefNoticeTest.php on line 16
>
> Deprecated: Call-time pass-by-reference has been deprecated; If you 
> would like to pass it by reference, modify the declaration of foo(). 
> If you would like to enable call-time pass-by-reference, you can set 
> allow_call_time_pass_reference to true in your INI file in 
> /var/www/callTimeRefNoticeTest.php on line 21
>
> Deprecated: Call-time pass-by-reference has been deprecated; If you 
> would like to pass it by reference, modify the declaration of foo(). 
> If you would like to enable call-time pass-by-reference, you can set 
> allow_call_time_pass_reference to true in your INI file in 
> /var/www/callTimeRefNoticeTest.php on line 26
> Array
> (
> [type] => 8192
> [message] => Call-time pass-by-reference has been deprecated; If you 
> would like to pass it by reference, modify the declaration of foo(). 
> If you would like to enable call-time pass-by-reference, you can set 
> allow_call_time_pass_reference to true in your INI file
> [file] => /var/www/callTimeRefNoticeTest.php
> [line] => 26
> )
> display_errors = 1
> error_reporting = 32767
> allow_call_time_pass_reference =
>
> Deprecated: Function split() is deprecated in 
> /var/www/callTimeRefNoticeTest.php on line 17
> Array
> (
> [type] => 8192
> [message] => Function split() is deprecated
> [file] => /var/www/callTimeRefNoticeTest.php
> [line] => 22
> )
>
> Deprecated: Function split() is deprecated in 
> /var/www/callTimeRefNoticeTest.php on line 28
>
> DONE
> chealer at vinci:/var/www$

8192 is E_DEPRECATED: http://ca2.php.net/manual/en/errorfunc.constants.php

As explained in 
http://www.php.net/manual/en/ini.core.php#ini.allow-call-time-pass-reference 
E_DEPRECATED is what should happen on PHP 5.3.

I reproduced this on PHP 5.3.8 on Windows, so this is clearly an 
upstream issue. However, PHP 5.4 should be released very soon, and this 
problem disappears with it, as call-time passes by reference are now 
illegal:

> Fatal error: Call-time pass-by-reference has been removed; If you would like to pass argument by reference, modify the declaration of foo(). in /var/www/callTimeRefNoticeTest.php on line 16

Therefore, I am not going to bother forwarding this and am simply 
marking this as fixed in PHP 5.4.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: callTimeRefNoticeTest.php
Type: application/x-httpd-php
Size: 593 bytes
Desc: not available
URL: <http://lists.alioth.debian.org/pipermail/pkg-php-maint/attachments/20120208/9ee15b46/attachment.php>


More information about the pkg-php-maint mailing list