2013-08-01 3 views
3

Как использовать AJAX и PHP для возврата статуса удаленного сервера? Единственное, что я хочу, это заставить его работать в фоновом режиме, поскольку это сделает мою веб-страницу более медленной, если я не использую AJAX.Использование AJAX с PHP для возврата статуса удаленного сервера

У меня есть PHP локон фрагмент кода здесь, который он пингует удаленный сервер (например, Google.com) и вернуть статус:

<?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 
?> 

Я надеюсь, что кто-то может вести меня по этой проблеме.

EDIT: Извините за непонятное заявление о проблеме. Как сделать процесс в фоновом режиме с помощью AJAX, используя функцию PHP, которую я предоставил выше?

+1

Какой у вас вопрос? – Mike

+0

* «Я надеюсь, что кто-то может провести меня через эту проблему» *, какая проблема? это не работает? 'if (Visit ($ load)) Веб-сайт вверх' определенно неверный синтаксис php. –

+0

AJAX работает в фоновом режиме, поэтому он должен делать то, что вы хотите. Код сервера должен отражать все, что вы хотите отобразить, а код AJAX должен помещать возвращаемые данные туда, где вы хотите на странице. – Barmar

ответ

2

1) заменить ваш последний, если в вашем PHP с

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 
}); 

UPDATE:

webpage.html

Live Demo

<!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); 
?> 
+0

Посмотрите код AJAX. Это json, он выводит непосредственно контент. Но я согласен с тем, что JSON следует использовать. –

+3

Ты серьезно? 'echo json_encode (array (" status "=>" Website is up "));' – Jimbo

+0

@mplungjan Поскольку ручное создание json просто ... просто нет. Вот для чего нужны функции json. – Jimbo

0

Вы изменили этот вопрос с того момента, когда я впервые посмотрел на него, так я сделал не получить, чтобы скопировать весь код, но вот один из способов:

Во-первых, завершить 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, поскольку вы ищете большую эффективность.

Я думаю, что это поможет (если я правильно понимаю ваш вопрос).

+1

Yuck. Если есть jQuery, используйте его для Ajax слишком – mplungjan

+0

jQuery ВСЕ вещи xD – Jimbo

+0

'$ .ajax' или даже' $ .post' будет работать здесь. – Jimbo

Смежные вопросы