如何缓存PHP生成的动态页面并包含Open Graphic Meta信息

时间:2012-03-27 04:17:46

标签: php mysql caching facebook-graph-api metadata

我需要一个在动态页面上缓存PHP信息的解决方案并包含元信息。我的问题是我正在使用一个缓存代码来保存我的页面信息,而不是代码和下面的信息。

查看我的页面My Dynamic Page

我的软件是从ID 5351(我的数据库中的歌曲)动态创建此页面我正在使用php来获取歌曲信息。为了使这个过程更有效率,我已经设置了PHP缓存。我现在使用下面的代码来缓存它....

<?php

  $cachefile = "cache/".$reqfilename.$cache_folder.md5($_SERVER['REQUEST_URI']);


  $cachetime = 11000 * 60; // 110000 minutes


  // Serve from the cache if it is younger than $cachetime

  if (file_exists($cachefile) && (time() - $cachetime
     < filemtime($cachefile))) 
  {

     include($cachefile);


     echo "<!-- Cached ".date('jS F Y H:i', filemtime($cachefile))." 
     -->n";


     exit;

  }

  ob_start(); // start the output buffer

&GT;

PHP缓存正在使用此完成,但我的问题是它只缓存此代码及以下的PHP信息。这是一个问题的原因,是因为我也在我的Open Graphic标签的元信息中使用PHP。 OG让人们可以在Facebook上“喜欢”我的音乐。这是我的OG标签的样子。

<title>Chennai Christian Radio</title>
<meta property="og:title" content="<?php echo $song->title; ?> by <?php echo $song->artist; ?> - Found on Chennai Christian Radio"/>
<meta property="og:type" content="song"/>
<meta property="og:url" content="http://chennaichristianradio.com/PHP/web/songinfo.php?songID=<?php echo $song->ID; ?>"/>
<meta property="og:image" content="<?php echo $song->picture; ?>"/> 
<meta property="og:site_name" content="Chennai Christian Radio"/>
<meta property="fb:admins" content="1013572426"/>
<meta property="og:description"
      content="Chennai Christian Radio is your last stop for today's best Christian Music. http://chennaichristianradio.com"/>

那么......缓存动态页面的解决方案是什么,包括元信息。这绝对是最好的选择,但是使用我当前的代码,它仍然在我的MYSql服务器中查询元信息和歌曲信息。我想通过为此创建静态页面并告诉我的软件指向这些页面而不是查询我的数据库它会更有效率,以及帮助减少我的PHP流量回到我的服务器。感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:1)

如果你想实现这一点,你应该缓存你的php脚本创建的最终html页面,或者你也可以查看varnish cache

如果你想用php做这个,那么我要做的就是在发送到客户端之前启动输出缓冲并将输出缓冲区的内容写入缓存。类似于以下(伪代码)

    <?php

  $cachefile = "cache/".$reqfilename.$cache_folder.md5($_SERVER['REQUEST_URI']);


  $cachetime = 11000 * 60; // 110000 minutes


  // Serve from the cache if it is younger than $cachetime

  if (file_exists($cachefile) && (time() - $cachetime
     < filemtime($cachefile))) 
  {

     include($cachefile);


     echo "<!-- Cached ".date('jS F Y H:i', filemtime($cachefile))." 
     -->n";


     exit;

  }

    // cache miss

    ob_start(); 

    // your code logic here

    // your views

    // at very end

    // write the ouput buffer content to cache file
    file_put_contents($cachefile, ob_get_contents());  
    ob_end_flush(); // this will send the response to client
    }
    ?>

我希望上面的伪代码有帮助