如果无法访问互联网,则显示静态图像

时间:2013-01-17 05:15:26

标签: php web

我正在大学网站上工作。我正在使用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插件,而互联网不可用(localhost)或Facebook无法访问?像这样:

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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您必须使用客户端JavaScript而不是服务器端代码。 JavaScript允许您检查图像是否可以成功加载,因此您可以尝试使用它来检查是否可以通过www.facebook.com test page )加载图片来访问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();

然后,您可以相应地设置iframe的src属性。

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

答案 2 :(得分: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
   }

 }

答案 3 :(得分:-1)

您可以通过php的fsockopen函数检查Facebook是否可用。

   $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'>"

    }

我没有检查它是否有效。试试吧。