2

我在一个大学网站上工作。我正在使用 Facebook 插件通过以下方式显示 Facebook 页面之类的内容:

<iframe src="//www.facebook.com/plugins/likebox.php?href=https%3A%2F%2Fwww.facebook.com%2Fpcclahore&amp;width=364&amp;height=220&amp;show_faces=true&amp;colorscheme=light&amp;stream=false&amp;border_color&amp;header=true" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:364px; height:220px;" allowTransparency="true"></iframe>

问题是 Facebook 在大学服务器上被阻止,所以除了警告之外什么都没有出现。当互联网不可用(本地主机)或 Facebook 无法访问时,是否可以显示静态图像而不是 Facebook 插件?像这样:

if(Facebook accessible)
show Facebook pluging
else
<img src="images/fb.jpg" width="364" height="220">
4

4 回答 4

3
// check if local server is HTTPS if so check Facebook HTTPS
$remote = ('80' !== $_SERVER['SERVER_PORT'])
    ? array('host' => 'ssl://www.facebook.com', 'port' => 443)  // HTTPS Facebook
    : array('host' => 'www.facebook.com', 'port' => 80);        // HTTP Facebook

$fp = @ fsockopen($remote['host'], $remote['port'], $errno, $errstr, 5);

echo (!$fp) // check if failed
    ? '<img src="images/fb.jpg" width="364" height="220">' // output local image
    : '<iframe src="//www.facebook.com/plugins/likebox.php?href=https%3A%2F%2Fwww.facebook.com%2Fpcclahore&amp;width=364&amp;height=220&amp;show_faces=true&amp;colorscheme=light&amp;stream=false&amp;border_color&amp;header=true" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:364px; height:220px;" allowTransparency="true"></iframe>'; // output IFRAME
于 2013-01-17T05:52:21.720 回答
1

您必须为此使用客户端 JavaScript 而不是服务器端代码。www.facebook.comJavaScript 允许您检查图像是否可以成功加载,因此您可以尝试使用它通过尝试从(测试页面)加载图像来检查 Facebook 是否可以访问:

var testImg = new Image();

testImg.onload = function() {
  alert('facebook REACHABLE');
};

testImg.onerror = function() {
  alert('facebook UNREACHABLE');
};

testImg.src = '//www.facebook.com/images/fb_logo_small.png?' + new Date().getTime();

然后您可以相应地设置srciframe 的属性。

您也可以将onerroriframe 本身放在上面(而不是使用单独的测试图像);但是,这将不起作用学院的内容过滤系统不会返回指示错误的 HTTP 状态。

于 2013-01-17T05:53:19.480 回答
0

您可以先尝试 ping 该站点。如果结果是肯定的,则显示插件,否则显示静态图像。将域设置为 facebook.com

 function pingDomain($domain){
   $file      = fsockopen ($domain, 80, $errno, $errstr, 10);
   $status    = 0;

   if (!$file) $status = -1;  // show static image
   else {
   //show plugin
   }

 }
于 2013-01-17T05:27:30.477 回答
-1

您可以通过 php.ini 的功能检查 facebook 是否可用 fsockopen

IE,

   $check = fsockopen("www.facebook.com", 80, "error_no", "error_message", timeout in seconds);

    if (!$check) {

    //iframe

    } else {

   echo "<img src='images/fb.jpg' width='364' height='220'>"

    }

我没有检查它是否有效。尝试一下。

于 2013-01-17T05:26:17.740 回答