2012-02-13 35 views
3

我试图检查某个域名是否存在。我的想法是用file_get_contents()读取内容,并检查它是成功还是失败。如何沉默单个PHP语句的警告?

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

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

或者有没有更好的方法来检查一个域是否存在?我试过checkdnsrr(),但是速度很慢。

+2

结帐误差控制操作http://us2.php.net/manual/en/language.operators.errorcontrol.php - 相关的问题HTTP:/ /stackoverflow.com/a/1454592/138383 – 2012-02-13 14:29:05

+0

谢谢大家,那就是我需要的。 – 2012-02-13 14:30:43

+0

@DanielS不,实际上它不是你所需要的。人们只是回答你认为你需要的东西*而没有看到你实际想要做的事情。 – Gordon 2012-02-13 14:34:54

回答

12

使用@标志禁止警告:

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

你可以使用的fopen代替并检查是否为空:

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

是的,我认为fopen()会在这种情况下更好地工作。谢谢! – 2012-02-13 14:31:18

2

试试这个:

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

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

PHP: Error Control Operators

通知上的评论使用@当PHP手工关于性能:

注意,使用@是狗缓慢,因为PHP会带来开销 抑制误差这条路。这是速度和方便性之间的折衷。

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

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/