javascript或PHP选择检测瞄准状态
-
06-07-2019 - |
题
该网站是 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&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>
如果 status
是 1
, 我们显示"在线",并且,在其他情况下("错误"),我们显示的"脱机":-)
但是,即使是这似乎是工作,我真的不喜欢这种解决办法^^
其他提示
+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.';
}
?>