Php 如果看到404,则文件获取内容失败

Php 如果看到404,则文件获取内容失败,php,file-get-contents,Php,File Get Contents,我有一个包含URL的数组。我试图一个接一个地获取内容,但有时,当URL是404时,文件\u get\u contents()会失败 function pageContent(String $url): \DOMDocument { $html = cache()->rememberForever($url, function () use ($url) { $opts = [ "http" => [

我有一个包含URL的数组。我试图一个接一个地获取内容,但有时,当URL是404时,
文件\u get\u contents()
会失败

function pageContent(String $url): \DOMDocument
    {
       $html = cache()->rememberForever($url, function () use ($url) {

           $opts = [
               "http" => [
                   "method" => "GET",
                   "header" => "Accept: text/html\r\n"
               ]
           ];

           try {

               $context = stream_context_create($opts);
               $file = file_get_contents($url, false, $context);

               return $file;

           } catch (\Exception $e) {

           }

       });
       $parser = new \DOMDocument();
       libxml_use_internal_errors(true);

       $parser->loadHTML($html = mb_convert_encoding($html,'HTML-ENTITIES', 'ASCII, JIS, UTF-8, EUC-JP, SJIS'));

       return $parser;
    }
我试图抓住它,但得到了这个错误。这次loadHTML失败了

DOMDocument::loadHTML(): Empty string supplied as input

在通过
loadHTML()
加载之前,可以检查
$html
是否为空:


不要将
文件\u get\u contents()
用于联网。改为使用
cURL
。代码中很明显,如果陷入“catch”语句,catch不会返回任何内容,因此
$html
变量为空。在这里,它抱怨有一个空的$html。如果你不想抱怨空字符串,那么在将它传递到DOMDocument::loadHTML()之前,检查$html的值;
if(!is_empty($html)) {
    $parser->loadHTML($html = mb_convert_encoding($html,'HTML-ENTITIES', 'ASCII, JIS, UTF-8, EUC-JP, SJIS'));
} else {
    return null;
}