• 09-05-2014, 13:47:49
    #1
    Merhaba,

    Yazdığım kontrol panelinde php dosyasının bulunduğu bilgisayar ile aynı ağda bulunan cihazların açık olup olmadığının kontrolünü yapmak için internette bir kaç arama yaptım ve ping atmak için gerekli kodu buldum, fonksiyona çevirdim ve şuanda çalışıyor. Fakat çalıştığı sayfada bir tablo var ve bu tabloda 50'ye yakın IP'nin kontrolü yapılıyor. Bu da aşırı yavaşlığa sebep oluyor. Bu yavaşlığı gidermek için ne yapabilirim?

    Fonksiyonum:

    function device_ping($host) {
    	exec("ping -c 4 " . $host, $output, $result);
    	if ($result == 0){
    		$pingstatus="1";
    	}else{
    		$pingstatus="0";
    	}
    	return $pingstatus;
    }
  • 09-05-2014, 22:10:12
    #2
    aklıma iki farklı yol geldi belki daha da olabilir. Bu projenizin detayına göre değişir.

    ilk çözüm
    her bir bir ip kontrolünü ping kontrolü yapmadan ping varmıs gibi listeleyin. İşlem yapılacak olana işlem öncesinde ping atarak varlığını naylamadan işleme geçmeyin.


    2. çözüm
    bir sayac ve ajax yardımıyla hepsini bir den değil 2 şer 3 er 5 er her neyse ping kontrolünü arka planda yapıp ipleri tabloda gösterin.
  • 10-05-2014, 00:52:41
    #3
    sayfa yüklendikten sonra ajax ile pinglemeyi denemenizi öneririm. Benzer bir problemi o şekilde aşmıştım.

    basit bir örnekle özetlemek gerekirse pingle.php adında bir dosyanızın olduğunu ve bu php dosyasının getle gelen host değerine ping attığını varsayalım alttaki gibi bir jquery koduyla yüklenen sayfadan bağımsız (asenkron) şekilde pingleme işlemlerinizi yaptırabilirsiniz.

    $(document).ready(function() {	
    	pingle(4.2.2.3);
    	pingle(4.2.2.4);
    	pingle(4.2.2.5);
    	.
    	.
    	.
    });
    
    function pingle(host)
    {
    	$.ajax({ type: "GET",
    		url: "pingle.php?host=" + analizdomain,
    		async: true,
    		success : function(text)
    		{
    			$('#sonuc').append(text); //işlem başarılı sonuc divine sonucu yaz.
    		}
    	});
    }
    bu sadece basit bir örnek, fonksiyona ip leri arrayla gönderip döngü ilede basabilirsiniz kullanımını geliştirmek size kalmış.
  • 10-05-2014, 01:46:34
    #4
    Hocam hiç aralıksız ping atmanız sıkıntı nedeni,
    her pingden sonra biraz bekletirseniz kodu faydası olabilir.

    sleep(1); // 1 saniye
    
    // yada milisaniye
    usleep(500000); // 0,5 saniye