سؤال

أرغب في إنشاء إجراء صغير إذا كان الإجراء الذي سيشغل ما إذا كان 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) هو فئة بينغ ل PHP. وبعد لقد كتبت ذلك فقط لهذا الغرض، ويتيح لك استخدام واحدة من ثلاث طرق مدعومة إلى Ping A Server (بعض الخوادم / البيئات تدعم فقط واحدة من الأساليب الثلاث).

مثال على الاستخدام:

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.. وبعد حصلت على الكود التالي من ملاحظة مستخدم هناك. ملاحظة يجب تشغيل ما يلي جذر.

على الرغم من أنه لا يمكنك وضع ذلك في صفحة ويب قياسية، يمكنك تشغيله كعمالة 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')؛ إذا (! preg_match ('/'.$ ping_how_many. "تلقى /'، $ ping_result)) {echo 'نتيجة ping bing'. PHP_EOL؛ // goto next1؛ }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top