如何存储og元标记信息?

时间:2014-10-21 00:29:47

标签: php html mysql metadata meta-tags

我正在使用以下PHP代码从网页中获取og:image属性:

$site_html = file_get_contents($some_url);
$html = new DOMDocument();
$html->loadHTML($site_html);
$meta_og_img = null;

foreach ($html->getElementsByTagName('meta') as $meta) {
    if ($meta->getAttribute('property') == 'og:image') { 
        $meta_og_img = $meta->getAttribute('content');
    }
}

我希望在每个页面加载时需要og:image信息,因此(1)从外部获取og:image最好(在页面加载时间方面等)每次用户加载页面时的网站或(2)获取og:image一次并将其存储在我的服务器上?

其次,如果我要将og:image图像存储在我的服务器上,我应该如何组织它所在的位置?

例如,如果我需要来自以下网页网址的og:image,我将如何以及在何处将给定的og:image存储在我的服务器上:

Link: http://www.huffingtonpost.com/2014/10/20/hong-kong-negotiations-go_n_6016982.html?utm_hp_ref=canada&ir=Canada
og:image: http://i.huffpost.com/gen/2187192/thumbs/o-UMBRELLA-COPS-facebook.jpg

我是否会将URL存储在数据库表中并为其提供唯一ID,以便og:image的服务器目录如下所示:

/var/www/html/og_images/<ID>/image.jpg

感谢。

2 个答案:

答案 0 :(得分:1)

最好是存储它还是每次都能获得它:最好尽可能多地保存本地存储的远程信息。必要的远程调用越多,页面加载时间越慢。如果您担心拥有最新的图像,那么有几种方法可以异步获取内容,而不会影响用户体验。

就存储而言,您可以使用多个方向。您需要确定要存储的图像数量以及空间要求。如果你有足够的磁盘空间,那么你当然可以将图像存储在本地硬盘驱动器上,但是你需要考虑随着流量的增加,对服务器的图像的请求会更多。

更智能的解决方案是研究使用像Amazon S3这样的解决方案,直接从他们的CDN CloudFront提供静态文件。然后,您不会为了提供静态文件而在您的网络服务器上产生额外的流量。

答案 1 :(得分:0)

  1. 您可以将所有内容存储到数据库中。

    $url = 'http://www.huffingtonpost.com/2014/10/20/hong-kong-negotiations-go_n_6016982.html?utm_hp_ref=canada&ir=Canada';    
    $ogImageUrl = 'http://i.huffpost.com/gen/2187192/thumbs/o-UMBRELLA-COPS-facebook.jpg';    
    $image = file_get_contents('http://i.huffpost.com/gen/2187192/thumbs/o-UMBRELLA-COPS-facebook.jpg');    
    
    $escaped_url = mysql_real_escape_string($url);
    $escaped_ogImageUrl = mysql_real_escape_string($ogImageUrl);
    
    $query = 'INSERT INTO `og_images` (`url`, `og_image_url`, `image`)
          VALUES ('.$escaped_url.', '.$escaped_ogImageUrl.', $image)";
    
  2. 我不知道将图像存储到数据库中是不是一个好主意。 归结为这个问题:&#34; blob或不blob&#34;?有关pro / contra参数,请参阅Storing Images in DB - Yea or Nay?

    Pro参数是:非常简单的SELECT查询。

    1. 您可以只存储链接和指向缓存文件夹的指针。

    2. 您只能存储链接和指向外部CDN的指针。

    3. 所有这些决定取决于用例和预期的流量。 如果这是一个低流量站点,存储到db可能就足够了 如果这是一个高流量站点,CDN层可能是更好的选择。