php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #62985 set_exception_handler doesn't work from command line
Submitted: 2012-08-31 16:40 UTC Modified: 2012-09-04 14:46 UTC
Votes:2
Avg. Score:4.0 ± 0.0
Reproduced:2 of 2 (100.0%)
Same Version:0 (0.0%)
Same OS:0 (0.0%)
From: lgandras at gmail dot com Assigned:
Status: Wont fix Package: *Configuration Issues
PHP Version: 5.3.16 OS: CentoOS 6.2 x64
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: lgandras at gmail dot com
New email:
PHP Version: OS:

 

 [2012-08-31 16:40 UTC] lgandras at gmail dot com
Description:
------------
This is the output of my console:


# /usr/local/bin/php -v
PHP 5.3.16 (cli) (built: Aug 30 2012 18:38:54) 
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
# /usr/local/bin/php -r 'set_exception_handler(function(){echo "catched\n";});throw new Exception;'

Fatal error: Uncaught exception 'Exception' in Command line code on line 1

Exception:  in Command line code on line 1

Call Stack:
    0.0002     632056   1. {main}() Command line code:0

root@vps:~#

Test script:
---------------
# /usr/local/bin/php -r 'set_exception_handler(function($e){echo "catched!\n";});throw new Exception;'

Expected result:
----------------
catched!

Actual result:
--------------
Fatal error: Uncaught exception 'Exception' in Command line code on line 1

Exception:  in Command line code on line 1

Call Stack:
    0.0002     632056   1. {main}() Command line code:0

Patches

bug62985.patch (last revision 2012-08-31 17:29 UTC by laruence@php.net)

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2012-08-31 17:25 UTC] laruence@php.net
The following patch has been added/updated:

Patch Name: bug62985.patch
Revision:   1346433947
URL:        https://bugs.php.net/patch-display.php?bug=62985&patch=bug62985.patch&revision=1346433947
 [2012-08-31 17:28 UTC] laruence@php.net
a quick fix has been attached. but it is a change of zend API, so maybe someone 
else will have objections
 [2012-08-31 17:29 UTC] laruence@php.net
The following patch has been added/updated:

Patch Name: bug62985.patch
Revision:   1346434197
URL:        https://bugs.php.net/patch-display.php?bug=62985&patch=bug62985.patch&revision=1346434197
 [2012-08-31 18:14 UTC] lgandras at gmail dot com
Temporary solution

echo '<?php set_exception_handler(function($e){echo "catched\n";});throw new Exception;' | /usr/local/bin/php
 [2012-09-04 14:46 UTC] laruence@php.net
-Status: Open +Status: Wont fix
 [2012-09-04 14:46 UTC] laruence@php.net
since you have got a alternative way,, then I'd like this be marked as wont'fix
 [2014-07-26 19:38 UTC] php at PointedEars dot de
I see the same in PHP 5.6.0RC2 on Debian GNU/Linux. This does not appear to be a configuration issue as the same script handles the exception when run with CLI as a file with the *same* configuration. The manual does not say anything about that, but someone reported the this problem in the user comments 8 years ago.  Why is this bug marked WONTFIX?

Steps to reproduce the problem (from bash command line):

$ cat php55-exceptions.php 
<?php

set_exception_handler(function (Exception $ex) {
  echo 42 . PHP_EOL;
});

throw new Exception();

$ sed -n '2,$p' php55-exceptions.php

set_exception_handler(function (Exception $ex) {
  echo 42 . PHP_EOL;
});

throw new Exception();

$ php -r "$(sed -n '2,$p' php55-exceptions.php)"
PHP Fatal error:  Uncaught exception 'Exception' in Command line code:6
Stack trace:
#0 {main}
  thrown in Command line code on line 6

$ php php55-exceptions.php 
42

Versions and configuration:

$ php -r 'phpinfo(INFO_GENERAL);'
phpinfo()
PHP Version => 5.6.0RC2
  
System => Linux pe-mobil2.localdomain 3.4.87-pe #1 SMP Mon Apr 21 15:20:23 CEST 2014 i686
Build Date => Jul 22 2014 22:49:54
Server API => Command Line Interface
Virtual Directory Support => disabled
Configuration File (php.ini) Path => /etc/php5/cli
Loaded Configuration File => /etc/php5/cli/php.ini
Scan this dir for additional .ini files => /etc/php5/cli/conf.d
Additional .ini files parsed => /etc/php5/cli/conf.d/05-opcache.ini,
/etc/php5/cli/conf.d/10-pdo.ini,
/etc/php5/cli/conf.d/20-curl.ini,
/etc/php5/cli/conf.d/20-gd.ini,
/etc/php5/cli/conf.d/20-imagick.ini,
/etc/php5/cli/conf.d/20-intl.ini,
/etc/php5/cli/conf.d/20-json.ini,
/etc/php5/cli/conf.d/20-mcrypt.ini,
/etc/php5/cli/conf.d/20-memcache.ini,
/etc/php5/cli/conf.d/20-mysql.ini,
/etc/php5/cli/conf.d/20-mysqli.ini,
/etc/php5/cli/conf.d/20-pdo_mysql.ini,
/etc/php5/cli/conf.d/20-readline.ini,
/etc/php5/cli/conf.d/20-xdebug.ini,
/etc/php5/cli/conf.d/20-xsl.ini

PHP API => 20131106
PHP Extension => 20131226
Zend Extension => 220131226
Zend Extension Build => API220131226,NTS
PHP Extension Build => API20131226,NTS
Debug Build => no
Thread Safety => disabled
Zend Signal Handling => disabled
Zend Memory Manager => enabled
Zend Multibyte Support => provided by mbstring
IPv6 Support => enabled
DTrace Support => enabled
  
Registered PHP Streams => https, ftps, compress.zlib, compress.bzip2, php, file, glob, data, http, ftp, phar, zip
Registered Stream Socket Transports => tcp, udp, unix, udg, ssl, sslv3, tls, tlsv1.0, tlsv1.1, tlsv1.2
Registered Stream Filters => zlib.*, bzip2.*, convert.iconv.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk, mcrypt.*, mdecrypt.*
  
This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.6.0-dev, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies
    with Xdebug v2.2.4, Copyright (c) 2002-2014, by Derick Rethans

$ dpkg -l 'php5*' | awk '/^.i/ {print $2, $3}'
php5 5.6.0~rc2+dfsg-5
php5-apcu 4.0.6-1
php5-cgi 5.6.0~rc2+dfsg-5
php5-cli 5.6.0~rc2+dfsg-5
php5-common 5.6.0~rc2+dfsg-5
php5-curl 5.6.0~rc2+dfsg-5
php5-gd 5.6.0~rc2+dfsg-5
php5-imagick 3.1.2-1+b1
php5-intl 5.6.0~rc2+dfsg-5
php5-json 1.3.5-3
php5-mcrypt 5.6.0~rc2+dfsg-5
php5-memcache 3.0.8-4+b1
php5-mysql 5.6.0~rc2+dfsg-5
php5-readline 5.6.0~rc2+dfsg-5
php5-xdebug 2.2.4-1+b1
php5-xsl 5.6.0~rc2+dfsg-5

Changes to php.ini:

$ diff -u /usr/share/php5/php.ini-production.cli /etc/php5/cli/php.ini
--- /usr/share/php5/php.ini-production.cli      2014-07-23 01:11:03.000000000 +0200
+++ /etc/php5/cli/php.ini       2014-06-02 13:05:31.000000000 +0200
@@ -83,8 +83,6 @@
 ; development version only in development environments, as errors shown to
 ; application users can inadvertently leak otherwise secure information.
  
-; This is php.ini-production INI file.
- 
 ;;;;;;;;;;;;;;;;;;;
 ; Quick Reference ;
 ;;;;;;;;;;;;;;;;;;;
@@ -231,7 +229,7 @@
 ; Development Value: 4096
 ; Production Value: 4096
 ; http://php.net/output-buffering
-output_buffering = 4096
+output_buffering = Off
  
 ; You can redirect all of the output of your scripts to a function.  For
 ; example, if you set output_handler to "mb_output_handler", character
@@ -276,7 +274,7 @@
 ; implications and is generally recommended for debugging purposes only.
 ; http://php.net/implicit-flush
 ; Note: This directive is hardcoded to On for the CLI SAPI
-max_execution_time = 30
+max_execution_time = 30000
  
 ; Maximum amount of time each script may spend parsing request data. It's a good
 ; idea to limit this time on productions servers in order to eliminate unexpectedly
@@ -710,6 +708,7 @@
  
 ; UNIX: "/path1:/path2"
 ;include_path = ".:/usr/share/php"
+include_path = ".:/usr/share/php:/home/pelinux/LCARS/scripts/php"
 ;
 ; Windows: "\path1;\path2"
 ;include_path = ".;c:\php\includes"
@@ -882,7 +881,7 @@
 [Date]
 ; Defines the default timezone used by the date functions
 ; http://php.net/date.timezone
-;date.timezone =
+date.timezone = Europe/Zurich
  
 ; http://php.net/date.default-latitude
 ;date.default_latitude = 31.7667
@@ -1686,7 +1685,6 @@
 ; http://php.net/mbstring.language
 ;mbstring.language = Japanese
  
-; Use of this INI entry is deprecated, use global internal_encoding instead.
 ; internal/script encoding.
 ; Some encoding cannot work as internal encoding. (e.g. SJIS, BIG5, ISO-2022-*)
 ; If empty, default_charset or internal_encoding or iconv.internal_encoding is used.

Backtrace:

I do not have a debug build of PHP.  Please tell me if I need to make one in this case (not a PHP crash).
 [2015-05-13 20:54 UTC] daniel dot beardsley at gmail dot com
Just ran into this same issue.

I'm suspicious that this isn't the only thing that just *doesn't* work when run from 'php -r'
 [2016-11-03 10:24 UTC] kastaneda at gmail dot com
The same incorrect behavior in interactive mode:

$ php -a
Interactive mode enabled

php > set_exception_handler(function(){echo "catched\n";});
php > throw new Exception;
PHP Warning:  Uncaught Exception in php shell code:1
Stack trace:
#0 {main}
  thrown in php shell code on line 1
php > ^D
$ php -v
PHP 7.0.8-0ubuntu0.16.04.3 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.8-0ubuntu0.16.04.3, Copyright (c) 1999-2016, by Zend Technologies
$
 [2021-07-15 12:25 UTC] jbilliras at openstudio dot fr
Issue still present on version 8.0.8 based on a Debian buster slim docker image
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sun Dec 22 01:01:30 2024 UTC