php - 用于检测 AIM 状态的 javascript 或 PHP 选项

标签 php javascript curl status aim

网址是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 的 if 语句中使用它来显示不同的内容。目前我正在使用这个:

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 技巧几乎是即时的。

curl 是否存在已知问题?有没有更快的方法?

我见过有人试图读取 img 标签的 .src 并执行类似的 if 语句,但我无法让它工作。

最佳答案

为了避免在事情不正常时等待十几秒,您可以设置更多选项,例如(参见 curl_setopt ):

  • CURLOPT_CONNECTTIMEOUT :尝试连接时等待的秒数。使用 0 无限期等待。
    • 将它设置为几秒钟就足够了
  • CURLOPT_TIMEOUT :允许 cURL 函数执行的最大秒数。
    • 这个也一样
  • CURLOPT_DNS_CACHE_TIMEOUT :将 DNS 条目保留在内存中的秒数。此选项默认设置为 120(2 分钟)。
    • 您可以将其设置为更高的值

如果您网站的用户通常只停留一两页以上,那么将该信息存储在 $_SESSION 中可能会很有趣。 ,并且只偶尔获取一次。

例如,只有当 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 ,我们显示“在线”,而在另一种情况下(“错误”),我们显示“离线”:-)

但是,即使它看起来有效,我也不太喜欢这个解决方案 ^^

关于php - 用于检测 AIM 状态的 javascript 或 PHP 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1213210/

相关文章:

php - linux下执行php文件的读取权限

javascript - knockout.js 在数据绑定(bind)声明中分配 observable

javascript - 创建追加函数后如何最小化单个框

python - Powershell:Webclient 无法上传字符串

php - 根据时区获取今天的记录

PHP调用树对象

php - 随机化特定组 mysql

javascript - 在 {block :Photos} on Tumblr 内渲染 {Caption}

php - file_get_contents、curl、wget 失败并返回 403 响应

elasticsearch - 有什么方法可以在 Elasticsearch 中使用cat API排除特定索引?