AIM durumunu algılamak için javascript veya PHP seçeneği

2 Cevap php

Web sitesi http://www.ipalaces.org/support/

Ben durum göstergeleri için kullanabileceğiniz kodu

<img src="http://big.oscar.aol.com/imperialpalaces?on_url=http://www.ipalaces.org/support/widget/status_green.gif&off_url=http://www.ipalaces.org/support/widget/status_offline.gif">

big.oscar.aol.com online iseniz size on_url için ayarladığınız ne görüntü onu yönlendirir, bunu sağlar ve çevrimdışı için off_url için aynı düzgün bir şeydir. Ancak, ben farklı şeyler görüntülemek için PHP veya javascript if ifadesinde kullanmak istiyor. Şu anda bu kullanıyorum:

function getaim($screenname) {
    	$ch		= curl_init();
    	$url	= "http://big.oscar.aol.com/$screenname?on_url=true&off_url=false";
    	curl_setopt($ch, CURLOPT_URL,$url);
    	curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    	// added to fix php 5.1.6 issue:
    	curl_setopt($ch, CURLOPT_HEADER, 1);
    	$result	= curl_exec($ch);
    	curl_close($ch);

    	if(eregi("true",$result)) {
    		return true;
    	} else {
    		return false;
    	}
}

If (getaim("ImperialPalaces")) { print "Online"; } else { print "Offline"; }

Bu kod ile sorun aslında sonuçları almak için nedense, rasgele zamanlarda o 12 saniye kadar sürebilir olmasıdır. Standart img hile neredeyse anlık bir zaruret.

Curl ile bilinen bir sorun var mı? Daha hızlı bir yolu var mı?

Birisi img etiketinin. Src okumak ve bunun gibi bir if deyimi yapmak için çalışacağız gördüm, ama ben çalışmak için alamadım.

2 Cevap

Şeyler Tamam yapmadığımız zaman bir düzine saniye bekliyor önlemek için, gibi, bir çift daha fazla seçenek ayarlayabilirsiniz (bkz. curl_setopt ):

  • CURLOPT_CONNECTTIMEOUT : The number of seconds to wait while trying to connect. Use 0 to wait indefinitely.
    • Birkaç saniye için ayarlama yeterli olacaktır
  • CURLOPT_TIMEOUT : The maximum number of seconds to allow cURL functions to execute.
    • Bu biri için aynı
  • CURLOPT_DNS_CACHE_TIMEOUT : The number of seconds to keep DNS entries in memory. This option is set to 120 (2 minutes) by default.
    • Muhtemelen daha yüksek bir değere ayarlamak olabilir

Web sitenizin, kullanıcıların genellikle sadece bir ya da iki sayfa daha fazla bunun üzerinde kalmak, $_SESSION bu bilgileri saklamak için ilginç olacak ve sadece bir süre içinde bir kez almak olabilir.

Örneğin, oturumda saklanan değer en fazla 5 dakika önce getirilen olması durumunda bunu almak olabilir. Muhtemelen :-) aramaların bir çift tasarruf olur


Bir diğer yolu, istemci tarafında bunu yapmak olabilir:

  • <img> etiketi ile görüntü almak
  • in case of "online", use an image that loads OK
    • "load" bile görüntü, bazı metin ile değiştirmek için bir işleyici fiş
  • in case of "offline", use an image that is in 404
    • "error" bile görüntü, bazı metin ile değiştirmek için bir işleyici fiş

O (yanlış bir şekilde, "hacky" it en tür) çok güzel değil, ama çalışması gerekir ;-)

Resminiz bu gibi olurdu:

<div id="arround-1">
    <img id="img-1" src="http://big.oscar.aol.com/imperialpalaces?on_url=http://www.ipalaces.org/support/widget/status_green.gif&amp;off_url=http://this.is-a-404-error.com"
        onload="replace_img_status(1, 1);"
        onerror="replace_img_status(1, 0);"
    />
</div>

Siz kullanıcı bağlıysa, <img> nihayet bulunmayan bir görüntü yol açtığını görmek; yani, "load" bile ateş olacaktır.

Ve durumda kullanıcı bağlı değil, <img> Sonunda var (it's giving a 404 error) olmayan bir görüntüye yol açacaktır; yani, "error" olay ateş olacaktır.

Şimdi böyle bir şey ile, bu iki olgunun dikkat çekmek için var:

<script type="text/javascript">
    var replace_img_status = function (num, status) {
        var div = document.getElementById('arround-' + num);
        if (div) {
            if (status == 1) {
                div.innerHTML = 'Online';
            } else {
                div.innerHTML = 'Offline';
            }
        }
    };
</script>

status 1, biz ("hata") diğer durumda, "Çevrimiçi" göstermek, ve ise, biz :-) "Çevrimdışı" gösterilecek

Ancak, hatta o, ben yapmak değil gerçekten çözüm gibi ^ ^ çalışıyor görünüyor

Bunun için Pascal +1, ama PHP bunu istiyor, ve hala ilgilenen herkes için, ben çevrimiçi / çevrimdışı veya ne olursa olsun URL sonuna koymak döner başlık konumunu ((kolları bir senaryo yaptık Örneğin, on_url = 1, başlığında Yer dönecekti: 1)

<?php
Define('Username', $_GET['sn']);
Define('URL', 'http://big.oscar.aol.com/' . Username . '?on_url=online&off_url=offline');
Define('Online', 'Location: online'); // Change online to whatever you have for on_url
Define('Offline', 'Location: offline'); // Change offline to whatever you have for off_url

$Response = Get_Headers(URL);

If(In_Array(Online, $Response)){
    Echo UCWords(StrToLower(Username)) . ' is currently online.';
}
ElseIf(In_Array(Offline, $Response)){
    Echo UCWords(StrToLower(Username)) . ' is currently offline, or has set their privacy settings.';
}
?>