2012-02-13 76 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/