27

Twitterが利用可能かどうかをチェックし(たとえば、現在とは異なり)、trueまたはfalseを返す小さなIFプロシージャを作成したいと思います。

ヘルプ :)

4

7 に答える 7

48
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 が存在するかどうかを確認する方法に関するこの投稿から取得しました。Twitter は、メンテナンス中は 300 を超えるエラー メッセージ、または 404 を提供するはずなので、これは完全に機能するはずです。

于 2009-08-06T14:03:45.463 に答える
23

ここに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);  
于 2009-08-06T14:02:21.380 に答える
10

shell_exec の使用:

<?php
$output = shell_exec('ping -c1 google.com');
echo "<pre>$output</pre>";
?>
于 2009-08-06T14:46:39.567 に答える
7

もう 1 つのオプション (HTTP 要求を送信する代わりに ping を実行する必要がある場合) は、PHP の Ping クラスです。私はまさにこの目的のためにそれを書きました.3つのサポートされている方法の1つを使用してサーバーに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.';
}
于 2012-12-10T03:13:38.623 に答える
5

pingほぼすべての OS で利用できます。したがって、システム コールを実行して結果を取得できます。

于 2009-08-06T14:36:53.637 に答える
0

次の関数では、 socket_createを使用して純粋な ICMP パケットを送信しています。そこのユーザーノートから次のコードを取得しました。注意: 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;
}
于 2013-11-12T12:03:29.373 に答える
0

これは私が使用した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.' 受信/',$ping_result) ){
       echo 'Bad ping result'. PHP_EOL;
        // next1 に移動;
    }


于 2016-08-26T11:18:49.540 に答える