我正在尝试错误处理file_get_contents方法,因此即使用户输入了错误的网站,它也会回显错误消息而不是非专业
警告:file_get_contents(sidiowdiowjdiso):无法打开流: 在第6行的C:\ xampp \ htdocs \ test.php中没有这样的文件或目录
我想如果我试一试并抓住它就能捕捉错误但是没有用。
try
{
$json = file_get_contents("sidiowdiowjdiso", true); //getting the file content
}
catch (Exception $e)
{
throw new Exception( 'Something really gone wrong', 0, $e);
}
答案 0 :(得分:10)
尝试使用curl_error而非file_get_contents:
的cURL<?php
// Create a curl handle to a non-existing location
$ch = curl_init('http://404.php.net/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$json = '';
if( ($json = curl_exec($ch) ) === false)
{
echo 'Curl error: ' . curl_error($ch);
}
else
{
echo 'Operation completed without any errors';
}
// Close handle
curl_close($ch);
?>
答案 1 :(得分:6)
file_get_contents
不会抛出异常,而是返回false,因此您可以检查返回的值是否为false:
$json = file_get_contents("sidiowdiowjdiso", true);
if ($json === false) {
//There is an error opening the file
}
这样您仍然会收到警告,如果要将其删除,则需要在@
前加file_get_contents
。 (这被认为是一种不好的做法)
$json = @file_get_contents("sidiowdiowjdiso", true);
答案 2 :(得分:5)
您可以执行以下任何操作:
为所有未处理的例外设置全局错误处理程序(也将处理警告):http://php.net/manual/en/function.set-error-handler.php
或者通过检查file_get_contents函数的返回值(使用===运算符,因为它将在失败时返回布尔值false),然后相应地管理错误消息,并通过预先添加a来禁用函数的错误报告“@”喜欢这样:
$json = @file_get_contents("file", true);
if($json === false) {
// error handling
} else {
// do something with $json
}
答案 3 :(得分:-1)
作为问题的解决方案,请尝试执行以下代码段
try
{
$json = @file_get_contents("sidiowdiowjdiso", true); //getting the file content
if($json==false)
{
throw new Exception( 'Something really gone wrong');
}
}
catch (Exception $e)
{
echo $e->getMessage();
}