该网站是 http://www.ipalaces.org/support/

代码是我的使用状况指标

<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或javascript显示不同的事情。目前,我使用这个:

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 img tag和做如果这样的声明,但我不得到它的工作。

有帮助吗?

解决方案

为了避免等待了十秒钟的时候事情没有做好,你可以设定一些更多的选择,如(见 curl_setopt) :

  • CURLOPT_CONNECTTIMEOUT :数秒钟等待,同时试图连接。使用0无限期地等待。
    • 其设置为一个几秒钟就足够了
  • CURLOPT_TIMEOUT :最大数秒cURL允许执行。
    • 同样对于这一个
  • CURLOPT_DNS_CACHE_TIMEOUT :数秒钟,以保持DNS项在存储器。此项设置120(2分钟)的默认。
    • 你可能可以设置一个更高的价值

如果用户的网站一般留在这不仅仅是一个或两个以上的页面,这可能是有趣的储存信息 $_SESSION, 和只取它曾经在一段时间。

例如,你可以拿它只有当值存届会议已经取超过5分钟前.它可能会保存几个电话 :-)


另一种方式可能做到这一对客户的侧:

  • 获取图像与 <img> 标记
  • 在情况下"在线",使用的图像,确定负载
    • 插件的处理程序上的"load"甚至图像,以替代这些文本
  • 在情况下的"脱机",使用的图像,是404
    • 插件的处理程序上的"error"甚至图像,以替代这些文本

这是不是很漂亮(这是一种"哈克",在错误的方式),但它应工作;-)

你的形象就是这样的:

<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来Pascal,但是对于那些想在PHP中使用它并且仍然感兴趣的人,我已经制作了一个小脚本来处理标题位置(它返回离线/在线或者你放在最后的任何内容URL(例如,on_url = 1,在标题中将返回Location: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.';
}
?>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top