Req #72089 [Com]: handle all fatal errors with try catch

From: Date: Fri, 17 Jun 2016 07:58:01 +0000
Subject: Req #72089 [Com]: handle all fatal errors with try catch
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-201689@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=72089&edit=1 ID: 72089 Comment by: lisachenko dot it at gmail dot com Reported by: paulobitfranca at gmail dot com Summary: handle all fatal errors with try catch Status: Closed Type: Feature/Change Request Package: *General Issues Operating System: Linux PHP Version: 7.0.5 Assigned To: cmb Block user comment: N Private report: N New Comment: I think, that we should replace all possible places with Fatal Errors with correct throwing of Error. This will give us more control over the file loading process and make it more atomic, because additional checks if(file_exists($file) && is_readable($file)) generate extra stat commands and slow. Moreover, for highload project, we can hit a situation where if succeeded, but require will fail because file was deleted after check. Code like this: try { require $fileName; } catch (Error $e) { echo "Oops, " . $e; } is much more reliable than this one: if (file_exists($fileName) && is_readable($fileName)) { @include $fileName; // Silencing errors for the case of race-condition, etc } Previous Comments: ------------------------------------------------------------------------ [2016-04-26 17:50:26] cmb@php.net Generally, that has already been done for PHP 7.0.0 where reasonable and possible, see <https://wiki.php.net/rfc/engine_exceptions_for_php7>. With regard to your example: if a file is *required* and it can't be included, it doesn't make much sense to go on. If on the other hand the file is not really required, just include it. ------------------------------------------------------------------------ [2016-04-23 21:28:00] paulobitfranca at gmail dot com Description: ------------ I mind that some fatal errors are not handled by the try/catch yet. For example, when I use require() and the include file doesn't exist. Is it possible that in a future version, all the fatal erros can be handled by try/catch? Test script: --------------- <?php error_reporting(E_ALL); try { require("xxx.php"); } catch (Throwable $e) { echo "An error: file doesn't exist" } echo "hi!"; Expected result: ---------------- An error: file doesn't exist Hi! Actual result: -------------- Fatal error: require() [function.require.html: Failed opening required 'xxx.php' (include_path='.:/opt/php7/includes') in /var/www/html/teste.php on line 8 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=72089&edit=1

« previous php.bugs (#201689) next »