0

gcache を使用して Web サイトのページ全体を HTML にキャッシュし、次にそれを読み取ってユーザーに表示するだけです。次のようになります。

$enableCache = true; 
if ($enableCache)
{
    include("gcache.php");
    $cache = new gCache;
    $cache->folder = "temp/";
    $id = join("", $_GET);
    $id = ereg_replace("[^A-Za-z0-9]", "", $id);
    $cache->contentId=$id;
    $cache->timeout = 5; 
    /* its mean gCache cached the whole page */
    /* so, gcache, decide if he must response the compressed or */
    /* uncompressed cache*/
    $cache->isPage = true; 
    if ($cache->Valid()) {
        echo $cache->content;
        die;
    }
    $cache->capture();
}

そして正常に動作します。サイトのヘッダーに「ログイン」リンクを追加しました。人がそれをクリックすると、クレジット情報を提供するサブページにリダイレクトされ、セッションパラメーターが設定されます (session_start が呼び出される前に):

  $_SESSION['theUser'] = $userId;
  header( "refresh:1;url=http://mysite.com"); 

そして、人は mysite.com にリダイレクトされます。しかし、問題は、サイトがキャッシュから取得されたことを確認することです。したがって、右上隅に再び「ログイン」がありますが、 $_SESSION['theUser'] が設定されている場合はそれを表示し、ログアウトするためのリンクを提供するように設定しました。ただし、ログインしていないバージョンの Web サイトがユーザーに返されるため、表示されません。

これを修正する方法は?

4

1 に答える 1

0

このようにキャッシュを使用する理由は、サーバーの負荷と応答時間を最小限に抑えるためだと思います。しかし、これは、サードパリティのプラグイン/クラス/ものを使用しない、より簡単な方法で実現できます。

<?php
    global $cachefile;
    //encode cache file name with sha1 
    $cachefilename = sha1($_SERVER['REQUEST_URI']);
    //remove trailing slash
    $cachefile = rtrim(sys_get_temp_dir (),'\\/').DIRECTORY_SEPARATOR.$cachefilename.'.cache';
     // How long to keep cache file?
    $cachetime = 60*5;    //5min
    // Is cache file still fresh? If so, serve it.   
    if (file_exists($cachefile) && filesize($cachefile)>100 && time() - $cachetime < filemtime($cachefile)  )  {
      readfile($cachefile);
      exit;
    }

    function cacheOutputtoFile()   {
     global $cachefile;
     $webpage = ob_get_contents();
     if ($fp = fopen($cachefile, 'w+'))
        {
            // Do an exclusive lock
            if (flock($fp, LOCK_EX))
            { 
               // Truncate file 
               ftruncate($fp, 0); 
               fwrite($fp, $webpage);
               fclose($fp);
            }
        }
    }

    ob_start();
    register_shutdown_function("cacheOutputtoFile");

:コールバック関数が呼び出されたときにソケットがすでに閉じられているため、 as パラメータを使用するregister_shutdown_function()代わりに使用する必要があり、クライアントはエコー出力を取得しません。cacheOutputtoFile()ob_start()$webpage

使用法: このファイルをルート サーバー フォルダー (または任意の場所) に配置し、キャッシュするすべてのページの上に 1 つ要求します。

require_once("cacheable.php");
于 2012-05-17T14:05:18.343 に答える