fopen,get_file_contents,缓存目的的替代方案?

时间:2014-12-22 22:27:42

标签: php caching fopen

我目前正试图弄明白,我如何在我的网站上重建缓存。

我有一个缓存插件,工作正常,但我需要让我的cron脚本“模拟”重建缓存的实际请求(它没有此功能)。

我有一个获取所有URL的while循环,并且使用fopen和get_file_contents,我已经能够生成缓存,但它没有所有东西(不能用作缓存)。

基本上,我需要使用“实际加载URL”的函数/方法,但可以用作cron脚本。

有人可以帮助我吗?我需要改为发出HTTP请求吗?我输了。

注意:如果我使用浏览器打开网站,则会生成缓存并且正确无误。

使用fopen或get_file_contents,它检查网站,但不生成有效的缓存! : - )

这样的事情可以发挥作用:

    <?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.mywebsite.com/");
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch)
echo $data; // Dont echo, it's a cron script
?>

2 个答案:

答案 0 :(得分:0)

您可以使用ob_方法在访问网页时缓存,而不必抓取它们。一些伪代码(只是if条件是伪的):

$cached_file_path = 'some path for cached file';
//TODO: would use filemtime($cached_file_path) and time() to determine if file was
//cached today. could also do it every 3 hours, or whatever
If file has not been cached today or cachefile does not exist, then
{
    ob_start(); // starts recording the output in a buffer
    //TODO: do all your database reads and echos
    .....
    $contents = ob_get_contents(); // gets all the output for you to save
    //TODO: save contents to file at $cached_file_path
   ....
   ob_end_flush(); // returns the content to client
   //means we can cache the file and send to client at same time
   //so this doesn't have to be run separately
   exit;
}
else
{
    //cache is current, so just serve the cached file
    include($cached_file_path);
    exit;
}

答案 1 :(得分:0)

我尝试了不同的方法..

好吧,如果它将直接链接放入我的cron作业管理器,它会刷新缓存。

必须以某种方式,我可以让我的脚本模仿这种行为吗?