PHP İle Ping Atmak

15 Ocak 2020 tarihinde Emre Can ÖZTAŞ tarafından paylaşıldı.

Ping, verinin gönderilen sunucuya iletilme süresidir.

PHP ile ping atma süresi hesaplanabilir. Genellikle, yönettiğim siteleri tek tek gezmek yerine; günün belirli saatlerinde bu sitelere ping gönderme işlemini otomatik bir şekilde gerçekleştiriyorum. Benim buradaki amacım; yönettiğim sitelerde herhangi bir sorunun olup / olmadığını kontrol etmek. Sorun varsa da hemen müdahalesini gerçekleştiriyorum. Böylelikle sitelerin sağlıklı bir şekilde işleyişleri devam ediyor.

Peki PHP ile ping atma işlemi nasıl yapılır? Hemen kodlarımıza geçelim, kodlarımız üzerinden konuşalım.

<?php

function the_ping_time($url = '', $port = 80, $timeout = 180)
{
   if (!empty($url)) {
       $request_time = microtime(true);
       $socket = @fSockOpen($url, $port, $errno, $errstr, $timeout);
       if (!$socket) {
           return (false);
       } else {
           $response_time = microtime(true);
           return (round((($response_time - $request_time) * 1000), 0) . ' ms');
       }
   } else {
       return (null);
   }
}

echo(the_ping_time('emrecanoztas.com'));

Yukarıdaki yazdığımız fonksiyon 3 parametre alıyor. Bunlardan ilki olan; $url değişkeni, web sitesinin adresi. Burada web sitesinin adresini başına herhangi bir şey yazmadan (http, https, ftp v.s) olmadan yazmamız gerekiyor. İkinci değişken olan; $port değişkeni, web sitesinin port adresini belirtir. Genellikle 80 portu üzerinde çalışır web siteleri. Üçüncü değişken olan; $timeout değişkeni, bir web sitesine bağlanmak için gerekli süredir. Bu süre saniye cinsindendir. Yani 3 dakika, bir siteye bağlanmak için verdiğimiz süre.

$request_time = microtime(true);

Satırı ile siteye bağlanmadan önce zamanı başlatıyoruz. Burası, başlangıç zamanımız.

$socket = @fSockOpen($url, $port, $errno, $errstr, $timeout);

Satırı, fSockOpen fonksiyonu ile soket bağlantısı oluşturuyoruz. Burada cURL da kullanabilirsiniz fakat pek sağlıklı bir sonuç elde edemezsiniz. Biz burada doğrudan, soket üzerinden siteye bağlanıyoruz. $errno değişkeni, bağlantıda meydana gelebilecek herhangi bir hata olması durumunda, o hatanın kodunu alacak olan değişkendir. $errstr değişkeni ise; oluşan hatanın String yani metinsel olarak karşılığını bulacağı değişkendir. Diğer değişkenleri zaten fonksiyona parametre olarak biz gönderdik.

Şayet; soket bağlantısı kurulamaz ise, false dönecektir. Soket bağlantısı başarılı ise;

$response_time = microtime(true);

satırı ile başlattığımız süreyi sonlandırıyoruz.

return (round((($response_time - $request_time) * 1000), 0) . ' ms');

Yukarıdaki satırımız, bağlanmadan hemen önce açtığımız değer ile bağlantı gerçekleştikten sonraki değeri birbirlerinden çıkarıyoruz. Daha sonra da 1000 ile çarpıyoruz. Burada 1000 ile çarpmamızın nedeni; mikrosaniye cinsinden olan değerimizi milisaniye cinsine çevirmek istememizdendir. İsterseniz; saniye cinsinden de değer alabilirsiniz. Fakat, site aktifse saniyenin çok altında bir değer verecektir. Dolayısıyla; saniye cinsinden 0 değeri ile karşılaşırsınız. round() fonksiyonu ile ortaya çıkan değeri yuvarlıyoruz. Son olarakta; ortaya çıkan değerimizin sonuna ms ekleyerek, milisaniye cinsinden olduğunu belirtiyoruz.

Bir web sitesine birden fazla istek yaptığınızda, dönen değerlerin birbirinden farklı olduğunu görebilirsiniz. Örneğin; yukarıdaki kodlarımızı aynen olduğu gibi 5 kere çalıştıralım.

39 ms
36 ms
30 ms
44 ms
26 ms

Görüldüğü gibi 5 değer de birbirinden farklı. Bu çeşitli sebeplerden dolayı kaynaklanıyor. Fakat burada şunu söyleyebiliriz; emrecanoztas.com adresine, ortalama ping gönderme süresi 35 ms’dir.

Ortaya çıkan değerlerin farklı olmasından çok odaklanmanız gereken şey; bu web sitesine erişimin olup olmaması. Erişim yoksa; herhangi bir sonuç elde edemezsiniz. $timeout süresini kısaltıp, 3 dakika beklemek zorunda da kalmayabilirsiniz.

Kategoriler: [PHP] Etiketler: #fsocket #ping #port #timeout #url

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

*
*

This site uses Akismet to reduce spam. Learn how your comment data is processed.