2009-07-31 39 views
6

web ben durum göstergeleri için kullanmak kod big.oscar.aol.com yapmanızı sağlayan düzgün bir şeydirAIM durumu

<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"> 

olduğunu http://www.ipalaces.org/support/

olduğunu Bunu yaparsanız, çevrimiçi olduklarında on_url için ayarladığınız herhangi bir resme ve çevrimdışı için off_url için de ona yönlendirir. Ancak, bunu farklı şeyler görüntülemek için PHP veya javascript bir if deyiminde kullanmak istiyorum. Ş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"; } 

sorun bu kodla aslında sonuçlarını almak için bazı nedenlerden dolayı, rasgele zamanlarda o 12 saniye kadar sürebilir olmasıdır. Oysa standart img hilesi neredeyse anında.

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

Birisi img etiketinin .src'sini okumayı denedim ve böyle bir if ifadesi yapmaya çalıştım ama işe yaramayabilirdim. (curl_setopt bakınız) gibi

cevap

4

şeyler Tamam yapmıyorlar zaman bir düzine saniye bekledikten önlemek için, bir çift daha seçenekleri ayarlayabilirsiniz:

  • CURLOPT_CONNECTTIMEOUT: saniye sayısı bağlanmaya çalışılırken beklenecek . Süresiz olarak beklemek için 0 kullanın. Maksimum saniye sayısı cURL işlevlerinin çalışmasına izin vermek: Birkaç saniye ayarlayarak
  • CURLOPT_TIMEOUT yeterli olacaktır. saniye sayısı hafızasında DNS girdilerini tutmak için: bu seferki
  • CURLOPT_DNS_CACHE_TIMEOUT için
    • aynı. Bu seçenek varsayılan olarak 120 (2 dakika) olarak ayarlanmıştır.
        Muhtemelen web sitenizin kullanıcıları genellikle birden sadece az veya iki sayfaya süre üzerinde kalmak, bu bilgiyi depolamak için ilginç olabilir

    daha yüksek bir değere ayarlamak olabilir

  • $_SESSION, ve sadece bir süre içinde bir kez getir. Örneğin, oturumda depolanan değer 5 dakikadan daha uzun bir süre önce getirildiyse, örneğin getirebilirsiniz.Muhtemelen istemci tarafında bunu olabilir


    bir diğer yolu :-) aramaların bir çift kaydetmek olacaktır:

    • <img> etiketiyle resim getirirseniz
    • durumunda "çevrimiçi",
      • ile değiştirmek, hatta görüntünün "load" konulu bir işleyici fiş Tamam yükleyen bir resim kullanmak Bazı metin, bazı metin
    • ile değiştirmek, hatta görüntünün " error" konulu bir işleyici fiş 404
      • olduğu bir resim kullanmak "çevrimdışı" söz konusu olduğunda
    • : (yanlış bir şekilde, "hacky" nin 's tür), ancak ;-)

      Resminiz böyleolacağını çalışması gerekir pek hoş değildi

    <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> 
    

    Kullanıcı bağlıysa, <img> nihayet bulunmayan bir görüntüye yol açar görüyoruz; Yani, "load" bile kovulacak.

    Ve, kullanıcının bağlı olmadığı durumda, <img> sonunda (404 hatası veriyor); Yani, "error" etkinliği tetiklenecek.

    Artık böyle bir şey ile, bu iki olgunun bakmak zorunda: 1 olduğunu

    <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 yoksa, diğer durumda ("hatası") "Online" yansıtmalı ve biz bile gerçekten bunun için Pascal'a bu çözüm ^^

  • 1

    1 sevmiyorum, o çalışıyor gibi görünüyor, ama bu isteyen herkes için,

    :-) "Çevrimdışı" gösterilecek ama PHP ve hala ilgileniyor, hea işleyen küçük bir senaryo yaptım der location (çevrimdışı/çevrimiçi veya URL'nin sonuna koyduğunuz her ne olursa olsun (Örneğin, on_url = 1, üstbilgide geri dönecektir) Konum: 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.'; 
    } 
    ?>