开发者

Try Catch cannot work with require_once in PHP?

开发者 https://www.devze.com 2023-02-18 04:02 出处:网络
I can\'t do something like this ? try { require_once( \'/includes/开发者_C百科functions.php\' ); } catch(Exception $e) {

I can't do something like this ?

try {
    require_once( '/includes/开发者_C百科functions.php' );      
}
catch(Exception $e) {    
    echo "Message : " . $e->getMessage();
    echo "Code : " . $e->getCode();
}

No error is echoed, server returns 500.


You can do it with include_once or file_exists:

try {
    if (! @include_once( '/includes/functions.php' )) // @ - to suppress warnings, 
    // you can also use error_reporting function for the same purpose which may be a better option
        throw new Exception ('functions.php does not exist');
    // or 
    if (!file_exists('/includes/functions.php' ))
        throw new Exception ('functions.php does not exist');
    else
        require_once('/includes/functions.php' ); 
}
catch(Exception $e) {    
    echo "Message : " . $e->getMessage();
    echo "Code : " . $e->getCode();
}


As you can read here : (emph mine)

require() is identical to include() except upon failure it will also produce a fatal E_COMPILE_ERROR level error. In other words, it will halt the script

This is about require, but that is equivalent to require_once(). This is not a catchable error.

By the way, you need to enter the absolute path, and I don't think this is right:

 require_once( '/includes/functions.php' ); 

You might want something like this

require_once( './includes/functions.php' ); 

Or, if you're calling this from a subdir or from a file that is included in different dirs, you might need something like

require_once( '/var/www/yourPath/includes/functions.php' ); 


This should work, but it is a bit of a hack.

if(!@include_once("path/to/script.php")) {
    //Logic here
}
0

精彩评论

暂无评论...
验证码 换一张
取 消