我写了这样的PHP代码

$site="http://www.google.com";
$content = file_get_content($site);
echo $content;

但是当我从$site中删除“http://”时,我得到以下警告:

警告: file_get_contents (www.google.com) (函数。file-get-contents]:失败 打开水流:

我试过,试过,但没成功。


当前回答

我是这样做的……不需要try-catch块…最好的解决方案总是最简单的……享受吧!

$content = @file_get_contents("http://www.google.com");
if (strpos($http_response_header[0], "200")) { 
   echo "SUCCESS";
} else { 
   echo "FAILED";
} 

其他回答

一种替代方法是抑制错误并抛出稍后可以捕获的异常。如果在代码中有多个对file_get_contents()的调用,这尤其有用,因为您不需要手动抑制和处理所有这些调用。相反,可以在一个try/catch块中对该函数进行多次调用。

// Returns the contents of a file
function file_contents($path) {
    $str = @file_get_contents($path);
    if ($str === FALSE) {
        throw new Exception("Cannot access '$path' to read contents.");
    } else {
        return $str;
    }
}

// Example
try {
    file_contents("a");
    file_contents("b");
    file_contents("c");
} catch (Exception $e) {
    // Deal with it.
    echo "Error: " , $e->getMessage();
}

您还可以将错误处理程序设置为调用Exception的匿名函数,并对该异常使用try / catch。

set_error_handler(
    function ($severity, $message, $file, $line) {
        throw new ErrorException($message, $severity, $severity, $file, $line);
    }
);

try {
    file_get_contents('www.google.com');
}
catch (Exception $e) {
    echo $e->getMessage();
}

restore_error_handler();

似乎有很多代码来捕捉一个小错误,但如果你在整个应用程序中使用异常,你只需要这样做一次,在顶部的方式(在包含的配置文件中,例如),它会将你所有的错误转换为异常。

这将尝试获取数据,如果它不起作用,它将捕获错误,并允许您在捕获范围内执行所需的任何操作。

try {
    $content = file_get_contents($site);
} catch(\Exception $e) {
    return 'The file was not found';
}
if (!file_get_contents($data)) {
  exit('<h1>ERROR MESSAGE</h1>');
} else {
      return file_get_contents($data);
}

在使用file_get_contents()之前,应该使用file_exists()函数。 这样可以避免php警告。

$file = "path/to/file";

if(file_exists($file)){
  $content = file_get_contents($file);
}