【问题标题】:how to detect blocked address from within php如何从php中检测被阻止的地址
【发布时间】:2011-08-15 02:14:28
【问题描述】:

所以这是我的问题;我们正在尝试在我们的网站上设置 facebook like 和 twitter 推文按钮,但是当 facebook 和 twitter 在他们的计算机上被阻止时,它会导致浏览器变得无响应。 所以我想做的是检测 facebook 或 twitter 是否被阻止,然后删除这些计算机的按钮,同时允许所有其他人加载它们。

这可以在 php 中还是在 javascript 中实现?

我无法找到任何有关测试链接是否被阻止的信息。

【问题讨论】:

  • 服务器端语言如何知道客户端计算机的网络是否阻止了特定站点?这没有意义。你只需要在这些按钮上设置一个超时时间。

标签: php javascript


【解决方案1】:

您可以尝试让 Javascript 从 twitter/facebook 加载 img 或其他资源并查看它是否实际加载,然后让一些 AJAX 告诉您的服务器它不工作。

但就 PHP 而言,它无法判断客户端机器能够建立什么样的连接。

【讨论】:

    【解决方案2】:

    要在 PHP 中管理此问题,您需要首先检测他们是否可以使用加载页面上的 JavaScript 图像方法进行访问,然后执行 javascript 重定向

    document.location="/index.php?TwitterBlocked=true";
    

    然后您可以根据 get 参数选择嵌入代码以显示按钮。

    然而,这整个方法是丑陋的。这些社交网站提供的按钮代码在整个网络中使用,如果您在文档加载时将它们作为 JavaScript 的最后一点加载,那么不应该对您的网站造成性能影响。

    【讨论】:

      【解决方案3】:

      您可以在页面上放置两个隐藏的图像,然后动态添加喜欢按钮。
      像这样的东西应该可以工作:

      <img style="display:none;"
        onload="user_can_access_facebook()"
        onerror="no_access_to_facebook()"
        src="http://static.ak.fbcdn.net/rsrc.php/v1/yp/r/kk8dc2UJYJ4.png" />
      

      javascript 函数 user_can_access_facebook() 应该在 DOM 中添加点赞按钮。

      (http://static.ak.fbcdn.net/rsrc.php/v1/yp/r/kk8dc2UJYJ4.png 是登录页面上 Facebook 徽标的 URL。这可能不是静态链接,因此您可能需要查找其他一些静态资源来检查。)

      对于 twitter,你也应该这样做。

      编辑:
      我整理了一个小型 POC:

      <html>
        <head>
          <script language="javascript" type="text/javascript">
            function user_can_access(sitename) {
              var siteDiv = document.getElementById(sitename + '_access');
              siteDiv.innerText = "You have access to " + sitename;
            }
      
            function no_access(sitename) {
              var siteDiv = document.getElementById(sitename + '_access');
              siteDiv.innerText = "You do NOT have access to " + sitename;
            }
          </script>
        </head>
        <body>
          <img src="http://static.ak.fbcdn.net/rsrc.php/v1/yp/r/kk8dc2UJYJ4.png"
            onload="user_can_access('Facebook')"
            onerror="no_access('Facebook')"
            style="display:none;" />
          <img src="http://support.twitter.com/images/twitter-logo-no-bird.png"
            onload="user_can_access('Twitter')"
            onerror="no_access('Twitter')"
            style="display:none;" />
      
          <div id="Facebook_access"></div>
          <div id="Twitter_access"></div>
        </body>
      </html>
      

      要在本地试用,只需阻止对上述相应域的访问(static.ak.fbcdn.net 和 support.twitter.com)。
      如前所述,您可能需要查找其他一些静态资源以进行检查。如果 facebook 和 twitter 上图片的 url 发生变化,那么您也必须在代码中进行更改。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-02
        • 2019-04-10
        • 2012-03-03
        • 2014-02-28
        • 1970-01-01
        • 2016-02-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多