如何使单个PHP语句的警告静音?

如何使单个PHP语句的警告静音?,php,Php,我正在尝试检查某个域是否处于活动状态。我的想法是使用文件_get_contents()读取内容,并检查它是否成功 $line = file_get_contents('http://www.domain.com'); if ($line==false) echo 'Domain is dead'; else echo 'Domain is live'; 我遇到的问题是,当它失败时,它会在网页上输出警告。通过PHP配置关闭所有警告不是一个选项,因为我需要在其他部分使用它们。有没

我正在尝试检查某个域是否处于活动状态。我的想法是使用文件_get_contents()读取内容,并检查它是否成功

$line = file_get_contents('http://www.domain.com'); 
if ($line==false)
    echo 'Domain is dead';
else
    echo 'Domain is live';
我遇到的问题是,当它失败时,它会在网页上输出警告。通过PHP配置关闭所有警告不是一个选项,因为我需要在其他部分使用它们。有没有办法使这条语句不输出警告

或者有没有更好的方法来检查域是否处于活动状态?我尝试了checkdnsrr(),但速度非常慢。

试试这个:

$line = @file_get_contents('http://www.domain.com'); 

从developr的角度来看,使用抑制操作符通常是一个坏主意。您应该仅在最坏情况下使用它

只要有可能,尽量找到一个不会产生失控错误的替代方案

您还应查看:


使用
@
符号抑制警告:

$line = @file_get_contents('http://www.domain.com');
您可以改用fopen并检查它是否为空:

 $fp = fopen('http://www.domain.com', 'r');
 if($fp) { 
    echo 'Domain is live'; 
 }

您可以使用
@
符号来处理PHP错误

注意PHP手册中关于使用
@
时性能的注释:

请注意,使用@dog的速度很慢,因为PHP会为 以这种方式抑制错误。这是速度和速度之间的权衡 方便


使用错误抑制器:

尽可能避免使用错误抑制器操作符(@)。 如果您尝试下面的代码,它在您的案例中仍然有问题

if ( fopen('http://www.google.com/', 'r')) {
     $line = file_get_contents( 'http://www.google.com/' ); 
     if ( $line==false )
          echo 'Domain is dead';
      else
          echo 'Domain is live';
}
else {
    echo 'Domain not exists';
}
如果此域不存在,则它将再次通过警告。警告:fopen():php\u network\u getaddresses:gethostbyname失败。对于您的情况,您可以使用@。我还认为这不是检查域名是否有效的最佳方法。 我找到了一个脚本,请试一试


您不应该完全下载该页面(为了提高速度)。只需使用HEAD方法进行检查:

$url = 'http://example.com/';
$code = FALSE;
$options['http'] = array(
    'method' => "HEAD", 
    'follow_location' => 0
);
$context = stream_context_create($options);
file_get_contents($url, NULL, $context);
if (!empty($http_response_header))
    echo 'Domain is live';
else echo 'Domain is dead';

请参见

检查与错误控制操作员相关的问题谢谢大家,这正是我所需要的。@DanielS不,实际上这不是你所需要的。人们只是回答你认为你需要的,而没有看到你实际上在做什么。我不想在这里捣乱,但永远不要使用错误抑制操作符。检查或@Gordon,实际上这是我需要的。我不会复制和粘贴任何答案,但现在我知道在哪里可以查看PHP手册以及可以使用哪些功能。在那之后,我将研究材料,得出自己的结论,并以最合适的方式将其应用到我的项目中。是的,我认为fopen()在这种情况下会工作得更好。谢谢