2016-06-30 6 views
1

私は自分のウェブサイトにサーバーステータスページを作成しようとしています。私は以下の機能を使ってウェブサイトがライブかどうかを確認しています。しかし、私が複数の検索をしようとすると、応答は最初の応答の後には常にDOWNになります。この機能を同じページで2回使用すると問題が発生します。

ログイン機能

function Visit($url){ 
     $agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";$ch=curl_init(); 
     curl_setopt ($ch, CURLOPT_URL,$url); 
     curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
     curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt ($ch,CURLOPT_VERBOSE,false); 
     curl_setopt($ch, CURLOPT_TIMEOUT, 5); 
     curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, FALSE); 
     curl_setopt($ch,CURLOPT_SSLVERSION,3); 
     curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, FALSE); 
     $page=curl_exec($ch); 
     $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
     curl_close($ch); 
     if($httpcode>=200 && $httpcode<300) return true; 
     else return false; 
} 

のindex.php

if (Visit("http://twitter.com")){ 
     echo "OK"; 
}else{ 
     echo "DOWN"; 
} 

if (Visit("http://google.com")){ 
     echo "OK"; 
     }else{ 
     echo "DOWN"; 
} 

エラーログ

[30-Jun-2016 12:11:10 UTC] PHP Warning: fread() expects parameter 1 to be resource, boolean given in /public_html/blog/server-status.php on line 40 
[30-Jun-2016 12:11:10 UTC] PHP Warning: fclose() expects parameter 1 to be resource, boolean given in /public_html/blog/server-status.php on line 41 

40と41S t行は;

curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 

上記スクリプトを実行する際に所定の応答は、Googleが最大であってもOK DOWNあります。私は他のリンクを試してみて、すべて同じエラーを生成します。

+0

エラーが表示されますか?エラーもありますか?戻ってくるコードを確認しましたか?あなたはこれまでこれを解決するために何を試みましたか? – Styphon

+1

申し訳ありません。エラーログを編集したばかりです。最新のものではないようですが、error_logファイルの最新のログを取得したので、エラーログが関連しているかどうかはわかりません。 –

+1

[** PHP経由でURLが存在するかどうかを確認するにはどうすればいいですか?**](http://stackoverflow.com/questions/2280394/how-can-i-check-if-a-url-exists -via-php) – FirstOne

答えて

2

Googleが302 Found HTTPコードで応答するため、関数がtrueを返さない理由です。

Google Inspector

Twitterのための同じことが、それは代わりに301で応答します。

応答がリダイレクトであるかどうかを確認し、それに応じてリターンする必要があります。

これはvar_dump($httpcode)の出力です。

enter image description here

私はVisit("https://www.google.it")を使用しようとしていると、それが必要として、それが動作します。

enter image description here

+0

自分のローカル環境でコードを自分でテストしました。 – GiamPy

+1

これは意味をなさないので、私のサイトが生きていて生きていないときに、自分のサイトが作り出しているhttpコードを見つけて、それを読むために自分のコードを変更しなければなりません。ありがとうございました。 –

+1

@GiamPyあなたは2つの異なるURLのために同じ文書の中で複数回機能を使ってみましたか? –

関連する問題