Php 文件获取内容是处理错误的好方法

Php 文件获取内容是处理错误的好方法,php,html,Php,Html,我正在尝试错误处理file_get_contents方法,因此即使用户输入了错误的网站,它也会回显错误消息,而不是非专业人员 警告:文件获取内容(sidiowdiowjdiso):无法打开流: 第6行的C:\xampp\htdocs\test.php中没有这样的文件或目录 我想,如果我试着抓住它,它将能够抓住错误,但这不起作用 try { $json = file_get_contents("sidiowdiowjdiso", true); //getting the file cont

我正在尝试错误处理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);  
}  

file\u get\u contents
不要在错误中抛出异常,而是返回false,因此您可以检查返回值是否为false:

$json = file_get_contents("sidiowdiowjdiso", true);
if ($json === false) {
    //There is an error opening the file
}
这样,您仍然会收到警告,如果要删除它,需要在
文件\u get\u contents
前面放置一个
@
。(这被认为是一种不好的做法)

尝试使用卷曲而不是文件获取内容:

<?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);
?>

您可以执行以下任一操作:

为所有未处理的异常设置全局错误处理程序(也将处理警告):

或者通过检查file_get_contents函数的返回值(使用===运算符,因为失败时它将返回布尔值false),然后相应地管理错误消息,并通过在函数前加“@”禁用错误报告,如下所示:


作为问题的解决方案,请尝试执行以下代码段

 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();  
}  

讨论可能比推广使用
@
更好也许值得注意的是,虽然使用
@
前缀可能会阻止向用户显示错误消息,但如果您使用分配给
设置错误处理程序的函数将错误记录到文件中,那么您仍然会看到文件中记录的警告,如果你没有,那么它们将包含在你的web服务器日志中。如果你想读取URL,你至少应该先验证它们看起来像URL,否则人们可以读取你服务器上的文件。更好的选择可能是使用curl,但在我执行代码时仍会收到警告现在请尝试执行上述代码段即使输入了有效的url(如www.google.comPlease),相同的结果始终返回false指定以下格式的url,即http@Hashey100:
www.google.com
是有效的主机名,不是完整的URL。正确的URL还需要协议(
http://
https://
等)。如果没有,则,
file\u get\u contents()
假设
file://
并尝试在其当前目录中检索名为
www.google.com
的本地文件。当我尝试此代码时,即使URL被投票表决为有效,它始终为false,因为这不是OP关于使用file\u get\u contents()的问题的答案-提供替代方案不是真正的解决方案。OP询问如何处理文件_get_contents()中的错误和警告,而不是如何以完全不同的方式处理。请注意,cURL并不是PHP的file_get_contents()的替代品,任何人都必须对代码进行严格的重构,因此这不是一个可以接受的答案。
$json = @file_get_contents("file", true);
if($json === false) {
// error handling
} else {
// do something with $json
}
 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();  
}