3

AJAX と PHP を使用してリモート サーバーのステータスを返すにはどうすればよいですか? 私が望む唯一のことは、AJAX を使用しないと Web ページが遅くなるため、バックグラウンドで実行することです。

ここに、リモート サーバー (Google.com など) に ping を送信し、そのステータスを返す PHP カール スニペットがあります。

<?php

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, 3);
       curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, FALSE);
       curl_setopt($ch,CURLOPT_SSLVERSION,3);
       curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, FALSE);
       $page=curl_exec($ch);
       //echo curl_error($ch);
       $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
       curl_close($ch);
       if($httpcode>=200 && $httpcode<300)
            return true;
       else return false;
}
$load = "http://www.google.com";
if (Visit($load))
       //Website is up
else
       //Website is down
?>

誰かがこの問題を解決してくれることを願っています。

編集: 不明確な問題の説明で申し訳ありません。上記で提供した PHP 関数を使用して、AJAX を使用してプロセスをバックグラウンドで実行するにはどうすればよいですか?

4

2 に答える 2

2

1)PHPの最後のifを次のように置き換えます

header("content-type: application/json");
$status = array("status" => Visit($load)?"Website is up":"Website is down");
echo json_encode($status);

2)

$(function() {
  var tId = setInterval(function() {
    $.get("your php.php?url=...",function(data) { // or $.post
      $("#somecontainer").html(new Date()+":"+data);
    },"json");
  },60000); //test every minute
});

アップデート:

webpage.html

ライブデモ

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
var url = "http://www.google.com";
function checkIt() {
  $("#check").append("<hr/>checking "+url+" at "+new Date());
  $.get("check.php?url="+encodeURIComponent(url),function(data) {
    $("#check").append('<br/>Result:'+data.status);
  })
  .error(function(xhr, status, error) {
    $("#check").append("<br/>An AJAX error occured: " + status + "<br/>Error: " + error);
  });
}
$(function() {
  checkIt();    
  var tId = setInterval(checkIt,60000); //test every minute
});
</script>
</head>
<body>
<div id="check"></div>
</body>
</html>

check.php

:

<?php
$url = $_GET['url'];

class URIInfo { 
    public $status;
    public $error;

    private $url;

    public function __construct($url) {
        $this->url = $url;
        $this->setData();
    }

    public function setData() {
      $ch = curl_init($this->url);
      curl_setopt($ch, CURLOPT_NOBODY, true);
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
      curl_exec($ch);
      $this->status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
      $this->error = curl_errno($ch);

      //echo "http status:".$this->status."\nerror:".curl_errno($ch);
      curl_close($ch);
    }

    public function getStatus() {
        return $this->status;
    }
    public function getError() {
        return $this->error;
    }

    // Other functions can be added to retrieve other information.
}

header("content-type: application/json");
$uri_info = new URIInfo($url);
$error = $uri_info->getError();
if ($error!=0) {
  if ($error==6) $error="URL likely invalid:".$url;
  $status = array("status" => "Error occurred: ".$error);
}
else {
  $isUp = $uri_info->getStatus()==200;
  $status = array("status" => "Website is ". $isUp?"up":"down");
}  
echo json_encode($status);
?>
于 2013-08-01T18:21:14.043 に答える
0

最初に見た時点から質問を変更したため、すべてのコードをコピーすることはできませんでしたが、1 つの方法を次に示します。

まず、PHP を完成させます (他の人が指摘しているように):

$load = "http://www.google.com";
if (Visit($load))
    echo "UP";
else
    echo "DOWN";

次に、AJAX を次のようにします。

<head>
<script>
    function getdetails() {
        var xmlhttp;
        xmlhttp = new XMLHttpRequest();
        xmlhttp.onreadystatechange = function () {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                document.getElementById("msg").innerHTML = " Website is " + xmlhttp.responseText;
            }
        }
        var URL = "URL-OF-THE-PHP-FILE-ABOVE";
        xmlhttp.open("GET", URL, true);
        xmlhttp.send();
    }
    window.onload=function() {
      getdetails(); 
    }
</script>
</head>
<body>
<p id="msg">Website Status</p>
</body>

しかし、より効率的な方法を探しているので、おそらく AJAX 呼び出しを onLoad にしたくないでしょう。

これが役立つと思います(あなたの質問を正しく理解していれば)。

于 2013-08-01T18:37:52.933 に答える