try/catch 在 PHP 中不起作用

2022-08-30 23:14:00

为什么我会收到此错误?

Warning: file_get_contents(http://www.example.com) [function.file-get-contents]: failed to open stream: HTTP request failed! in C:\xampp\htdocs\test.php on line 22

Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\test.php on line 22

代码如下:

 try {
    $sgs = file_get_contents("http://www.example.com");
 }
 catch (Exception $e) {
    echo '123';
 }
 echo '467';

try\catch 不是应该继续执行代码吗?或者也许有一些不同的方法来做到这一点?


答案 1

尝试。。。catch 更适用于空对象异常和手动引发的异常。它真的与你在Java中看到的范式不同。警告几乎是欺骗性的,因为它们会特别忽略尝试...捕获块。

要禁止显示警告,请在方法调用(或数组访问)前面加上 .@

 $a = array();
 $b = @$a[ 1 ]; // array key does not exist, but there is no error.

 $foo = @file_get_contents( "http://somewhere.com" );
 if( FALSE === $foo ){ 
     // you may want to read on === there;s a lot to cover here. 
     // read has failed.
 }

呵呵,最好查看致命异常也是完全无法捕捉的。在某些情况下,其中一些可能会被捕获,但实际上,您想要修复致命错误,而您不想处理它们。


答案 2

catch无法捕获致命错误。

只需在手册中搜索file_get_contents,那里列出了几种解决方案,这里有一个:timeout

$ctx = stream_context_create(array(
    'http' => array(
        'timeout' => 1
        )
    )
);
file_get_contents("http://example.com/", 0, $ctx); 

推荐