Я хотел бы создать небольшую процедуру IF, которая проверит, доступен ли Twitter (в отличие от, например, сейчас), и вернет 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-адрес. Поскольку Twitter должен предоставлять сообщение об ошибке выше 300, когда он находится в обслуживании, или 404, это должно работать отлично.
Вот один из них:
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>"; ?>
Другой вариант (если вам нужно / нужно выполнить ping вместо отправки HTTP-запроса) – это класс Ping для PHP . Я написал это только для этой цели, и он позволяет использовать один из трех поддерживаемых методов для ping-сервера (некоторые серверы / среды поддерживают только один из трех методов).
Пример использования:
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
доступен практически для каждой ОС. Таким образом, вы можете сделать системный вызов и получить результат.
С помощью следующей функции вы просто отправляете чистые ICMP-пакеты, используя socket_create . Я получил следующий код из записки пользователя . NB. Вы должны запустить следующую команду: root .
Хотя вы не можете поместить это на стандартную веб-страницу, вы можете запустить ее как задание 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.' получено / ', $ ping_result)) { echo «Плохой результат ping». PHP_EOL; // goto next1; }