2009-07-31 10 views
6

वेबसाइट http://www.ipalaces.org/support/जावास्क्रिप्ट या PHP विकल्प पता लगाने के लिए AIM स्थिति

है कोड मैं स्थिति संकेतकों के लिए उपयोग

<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 आप की सुविधा देता है है करते हैं, यह है कि यह जो कुछ भी छवि आप अगर वे ऑनलाइन हैं on_url के लिए निर्धारित किया है, और ऑफलाइन के लिए off_url के लिए एक ही करने के लिए पुनर्निर्देश। हालांकि, मैं इसे अलग-अलग चीजों को प्रदर्शित करने के लिए PHP या जावास्क्रिप्ट में एक कथन में उपयोग करना चाहता हूं। वर्तमान में मैं इस का उपयोग कर रहा:

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

समस्या इस कोड के साथ कि किसी कारण से, यादृच्छिक समय पर इसे 12 सेकंड के लिए ले जा सकते हैं यह वास्तव में परिणाम पुनः प्राप्त करने के लिए है। जबकि मानक आईएमजी चाल लगभग तुरंत है।

वहाँ कर्ल के साथ एक ज्ञात समस्या है? क्या कोई तेज तरीका है?

मैंने देखा है किसी img टैग की .src को पढ़ने के लिए कोशिश करते हैं और बयान है कि अगर एक करते हैं, लेकिन मैं यह काम करने के लिए मिल सके।

उत्तर

4

एक दर्जन से अधिक सेकंड के लिए इंतजार कर रहे है जब चीजें ठीक नहीं कर रहे हैं से बचने के लिए आप कुछ और विकल्प सेट कर सकते हैं, जैसे (curl_setopt देखें):

  • CURLOPT_CONNECTTIMEOUT: सेकंड की संख्या कनेक्ट करते समय प्रतीक्षा करने के लिए । अनिश्चित काल तक प्रतीक्षा करने के लिए 0 का प्रयोग करें। सेकंड की अधिकतम संख्या cURL कार्यों को निष्पादित करने की अनुमति के लिए:
    • सेकंड के एक जोड़े के लिए यह स्थापित करने के लिए पर्याप्त
  • CURLOPT_TIMEOUT होगा। सेकंड की संख्या स्मृति में DNS प्रविष्टियों रखने के लिए:
      यह एक
  • CURLOPT_DNS_CACHE_TIMEOUT के लिए
  • ही। यह विकल्प डिफ़ॉल्ट रूप से 120 (2 मिनट) पर सेट है।
    • आप शायद एक उच्च मूल्य के लिए इस सेट कर सकते हैं

अपनी वेबसाइट के उपयोगकर्ताओं को आम तौर पर केवल एक से अधिक या दो पृष्ठों के लिए यह पर रहने, तो यह उस जानकारी स्टोर करने के लिए दिलचस्प हो सकता है $_SESSION, और केवल थोड़ी देर में इसे एक बार लाएं।

उदाहरण के लिए, आप इसे लाने सकता है केवल यदि सत्र में संग्रहीत मूल्य अधिक से अधिक 5 मिनट पहले दिलवाया गया है।यह शायद कॉल के एक जोड़े की बचत होगी :-)


एक अन्य तरीका है कि क्लाइंट-साइड पर करने के लिए हो सकता है:

  • <img> टैग के साथ छवि लाने
  • "ऑनलाइन" के मामले में, एक छवि का उपयोग करें जो ठीक
    • छवि के यहां भी "load" पर एक हैंडलर प्लग करें, इसे बदलने के लिए कुछ पाठ
  • "ऑफ़लाइन" के मामले में, एक छवि 404
    • में है का उपयोग कुछ पाठ
    से बदलने के लिए " error" छवि के भी पर कोई हैंडलर प्लग,

कि बहुत अच्छा नहीं है ("hacky", गलत तरीके से की यह की तरह), लेकिन यह काम करना चाहिए ;-)

आपकी छवि इस तरह होगा:

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

आप देखते हैं कि, यदि उपयोगकर्ता जुड़ा हुआ है, <img> अंत में एक छवि है कि मौजूद है की ओर जाता है; इसलिए, "load" भी निकाल दिया जाएगा।

और, मामले उपयोगकर्ता जुड़ा नहीं है में, <img> अंत में एक छवि जो मौजूद नहीं है के लिए नेतृत्व करेंगे (यह एक 404 त्रुटि दे रही है); इसलिए, "error" ईवेंट निकाल दिया जाएगा।

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

तो status1 है, हम "ऑनलाइन" प्रदर्शित करते हैं, और अन्य मामले में ("त्रुटि"),:

अब आप कुछ इस तरह के साथ उन दो मामलों का ख्याल रखना है, हम "ऑफ़लाइन" प्रदर्शित :-)

लेकिन, यहां तक ​​कि मैं नहीं वास्तव में उस के लिए कि समाधान ^^

1

+1 पास्कल की तरह है, यह काम कर रहा है है, लेकिन किसी को भी इस चाहता है के लिए PHP, और अभी भी दिलचस्पी है, मैंने एक छोटी सी लिपि बनाई है जो हेरा को संभालती है डर लोकेशन (जो ऑफ़लाइन/ऑनलाइन या यूआरएल के अंत में जो कुछ भी डालता है (उदाहरण के लिए, हेडर में, on_url = 1, वापस लौटाएगा स्थान: 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.'; 
} 
?> 
संबंधित मुद्दे