]> granicus.if.org Git - php/commitdiff
Fixed bug #72089: Throw Error on require failure
authorNikita Popov <nikita.ppv@gmail.com>
Fri, 29 May 2020 15:27:51 +0000 (17:27 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Fri, 5 Jun 2020 07:46:39 +0000 (09:46 +0200)
It should be noted that we still throw the usual fopen warnings,
but the final fatal error becomes an Error exception. Combine
with @ to suppress FS warnings.

Closes GH-5641.

NEWS
Zend/tests/include_stat_is_quiet.phpt
main/main.c
tests/lang/bug35176.phpt

diff --git a/NEWS b/NEWS
index e5fd10ddc189dbc29f4f8730a64274c8da964ca8..f43f320b25ce57c61e763d0da3b78cd2e7dd83b7 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -27,6 +27,8 @@ PHP                                                                        NEWS
   . Fixed bug #79467 (data:// wrappers are writable). (cmb)
   . Implemented FR #47074 (phpinfo() reports "On" as 1 for the some
     extensions). (cmb)
+  . Implemented FR #72089 (require() throws fatal error instead of exception).
+    (Nikita)
 
 - BZ2:
   . Fixed bug #71263 (fread() does not report bzip2.decompress errors). (cmb)
index 932885bd6665e7cef3e655f39990d7dda970564f..ef8240f9caff64e2f47e1adf4dac1cb523136846 100644 (file)
@@ -27,4 +27,7 @@ try {
 --EXPECTF--
 Warning: require_once(doesnt_exist.php): Failed to open stream: No such file or directory in %s on line %d
 
-Fatal error: require_once(): Failed opening required 'doesnt_exist.php' (include_path='test://foo:test://bar') in %s on line %d
+Fatal error: Uncaught Error: Failed opening required 'doesnt_exist.php' (include_path='test://foo:test://bar') in %s:%d
+Stack trace:
+#0 {main}
+  thrown in %s on line %d
index 1cb78dbc0fca4cd7598c71429849979014ce4ac2..7549de3d54b741a8ba810dc22877f04cacf7f76e 100644 (file)
@@ -1618,7 +1618,7 @@ static ZEND_COLD void php_message_handler_for_zend(zend_long message, const void
                        php_error_docref("function.include", E_WARNING, "Failed opening '%s' for inclusion (include_path='%s')", php_strip_url_passwd((char *) data), STR_PRINT(PG(include_path)));
                        break;
                case ZMSG_FAILED_REQUIRE_FOPEN:
-                       php_error_docref("function.require", E_COMPILE_ERROR, "Failed opening required '%s' (include_path='%s')", php_strip_url_passwd((char *) data), STR_PRINT(PG(include_path)));
+                       zend_throw_error(NULL, "Failed opening required '%s' (include_path='%s')", php_strip_url_passwd((char *) data), STR_PRINT(PG(include_path)));
                        break;
                case ZMSG_FAILED_HIGHLIGHT_FOPEN:
                        php_error_docref(NULL, E_WARNING, "Failed opening '%s' for highlighting", php_strip_url_passwd((char *) data));
index cbba52055d0f0efb73095bb36879aecdb19408d0..c573c9c9de57fa7eea07a00ca9c54a0be3c984e4 100644 (file)
@@ -12,4 +12,7 @@ require_once('nonexisiting.php');
 <br />
 <b>Warning</b>:  require_once(nonexisiting.php) [<a href='/function.require-once.html'>function.require-once.html</a>]: Failed to open stream: No such file or directory in <b>%sbug35176.php</b> on line <b>2</b><br />
 <br />
-<b>Fatal error</b>:  require_once() [<a href='/function.require.html'>function.require.html</a>]: Failed opening required 'nonexisiting.php' (%s) in <b>%sbug35176.php</b> on line <b>2</b><br />
+<b>Fatal error</b>:  Uncaught Error: Failed opening required 'nonexisiting.php' (include_path='%s') in %s:%d
+Stack trace:
+#0 {main}
+  thrown in <b>%sbug35176.php</b> on line <b>2</b><br />