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

时间:2012-02-13 14:26:18

标签: php

我正在尝试检查某个域是否存在。我的想法是用file_get_contents()读取内容,并检查它是成功还是失败。

$line = file_get_contents('http://www.domain.com'); 
if ($line==false)
    echo 'Domain is dead';
else
    echo 'Domain is live';

我遇到的问题是,当它失败时,它会在网页上输出警告。通过PHP配置关闭所有警告不是一个选项,因为我需要在其他一些部分。有没有办法让这个单一语句不输出警告?

或者是否有更好的方法来检查域名是否有效?我试过checkdnsrr(),但它很慢。

7 个答案:

答案 0 :(得分:12)

使用@符号来禁止警告:

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

您可以改用fopen并检查它是否为null:

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

答案 1 :(得分:5)

You can use suppression operator @.

从开发者的角度来看,使用抑制运算符通常是一个糟糕的主意。您应该只在最坏情况方案中使用它。

尽可能尝试找到一种不会导致错误失控的替代方案。

您还应该查看:

答案 2 :(得分:4)

您可以使用@符号来压制PHP错误。

PHP: Error Control Operators

注意关于使用@时的效果的PHP手册的评论:

  

请注意,使用@是慢狗,因为PHP会产生开销   以这种方式抑制错误。这是速度和速度之间的权衡   便利性。

答案 3 :(得分:2)

试试这个:

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

答案 4 :(得分:0)

答案 5 :(得分:0)

尽可能避免使用错误抑制运算符(@)。 如果您尝试使用以下代码,则在您的情况下仍然存在问题。

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_network_getaddresses:gethostbyname失败。对于您的情况,您可以使用@。我也认为这不是检查域名的最佳方法。 我找到了一个脚本,请试一试。

https://github.com/HelgeSverre/Domain-Availability

答案 6 :(得分:0)

您不应该完全下载该页面(出于速度目的)。只需用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';

请参阅https://hakre.wordpress.com/2011/09/17/head-first-with-php-streams/