Twitterが使用可能かどうかを確認する小さなIFプロシージャを作成して(たとえば、現在とは異なり)、trueまたはfalseを返します。
助けて :)
function urlExists($url=NULL)
{
if($url == NULL) return false;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($httpcode>=200 && $httpcode<300){
return true;
} else {
return false;
}
}
これは、URLが存在するかどうかを確認する方法に関する this post から取得されました。 Twitterは、メンテナンス中に300を超えるエラーメッセージ、または404を提供する必要があるため、これは完全に機能するはずです。
以下がその1つです。
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?lngWId=8&txtCodeId=1786
別の:
function ping($Host, $port, $timeout) {
$tB = microtime(true);
$fP = fSockOpen($Host, $port, $errno, $errstr, $timeout);
if (!$fP) { return "down"; }
$tA = microtime(true);
return round((($tA - $tB) * 1000), 0)." ms";
}
//Echoing it will display the ping if the Host is up, if not it'll say "down".
echo ping("www.google.com", 80, 10);
Shell_exec を使用:
<?php
$output = Shell_exec('ping -c1 google.com');
echo "<pre>$output</pre>";
?>
別のオプション(HTTPリクエストを送信する代わりにpingが必要/必要な場合)は、 PHPのPingクラス です。この目的のためだけに作成し、サポートされている3つの方法のいずれかを使用してサーバーにpingを実行できるようにしました(一部のサーバー/環境は3つの方法の1つのみをサポートしています)。
使用例:
require_once('Ping/Ping.php');
$Host = 'www.example.com';
$ping = new Ping($Host);
$latency = $ping->ping();
if ($latency) {
print 'Latency is ' . $latency . ' ms';
}
else {
print 'Host could not be reached.';
}
ping
は、ほぼすべてのOSで使用できます。したがって、システムコールを行い、結果を取得できます。
次の関数を使用すると、 socket_create を使用して純粋なICMPパケットを送信するだけです。 ユーザーノート から次のコードを取得しました。 N.B.以下をrootとして実行する必要があります。
これを標準のWebページに配置することはできませんが、cronジョブとして実行し、データベースに結果を取り込むことができます。
そのため、サイトを監視する必要がある場合に最適です。
function twitterIsUp() {
return ping('Twitter.com');
}
function ping ($Host, $timeout = 1) {
/* ICMP ping packet with a pre-calculated checksum */
$package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost";
$socket = socket_create(AF_INET, SOCK_RAW, 1);
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0));
socket_connect($socket, $Host, null);
$ts = microtime(true);
socket_send($socket, $package, strLen($package), 0);
if (socket_read($socket, 255)) {
$result = microtime(true) - $ts;
} else {
$result = false;
}
socket_close($socket);
return $result;
}
これは私が使用したphpコードです。返信は通常次のようになります。
2パケット送信、2パケット受信、0%パケット損失、時間1089ms
そこで、次のようなコードを使用しました。
$ ping_how_many = 2; $ ping_result = Shell_exec( 'ping -c'。$ ping_how_many。 'bing.com'); if(!preg_match ( '/'.$ping_how_many。' received/'、$ ping_result)){ echo' Bad ping result '。 PHP_EOL; // goto next1; }