1

私はCIキャッシュの初心者です。codeigniter ページのキャッシュに関する奇妙な問題に直面しています。$this->output->cache(300); 引数が変更された場合、キャッシュされたバージョンが読み込まれないことを期待していましたGET[]。ただし、パラメーターを考慮せずにキャッシュをロードしていGET[]ます。

コメントが保存されているかどうかを示すページが1つあり、[パラメーターを取得して]、 /product/product-name/?saved=trueコメントフォームがある同じページにリダイレクトします。しかし、それは機能していません。get パラメータに応じて、古いキャッシュを無効にして新しいキャッシュを作成するにはどうすればよいですか? または、コメント システムの動作を変更する必要がありますか?

ありがとう。

編集

この場合、database cache代わりに単に使用する必要がありますか?Web page cache

4

4 に答える 4

2

cache_override フックを作成して、GET[] 変数が設定されているかどうかを確認してから、cache_override をスキップします。

[編集#1]

次に例を示します。

hooks ディレクトリに次のファイルを作成します。

<?php

class GetChecker {

    public function checkForGet()
    {
        global $OUT, $CFG, $URI;

        if (isset($_GET) AND ! empty($_GET))
        {
            return;
        }

        if ($OUT->_display_cache($CFG, $URI) == TRUE)
        {
            exit;
        }
    }

}

次に、これを config/hooks.php に追加します。

$hook['cache_override'][] = array(
    'class' => 'GetChecker',
    'function' => 'checkForGet',
    'filename' => 'GetChecker.php',
    'filepath' => 'hooks'
);

私はそれをテストしていません。動作させるには少し調整が必要かもしれません...

于 2013-01-25T06:57:14.570 に答える
1

CI 3+ 、 file system/core/Output.php 559 行でテストし、これを変更します

if ($CI->config->item('cache_query_string') && !empty($_SERVER['QUERY_STRING']))
    {
        $uri .= '?'.$_SERVER['QUERY_STRING'];
    }

これについて

if ($CI->config->item('cache_query_string') /* && ! empty($_SERVER['QUERY_STRING']) */ && !empty($_REQUEST))
    {
        // $uri .= '?'.$_SERVER['QUERY_STRING'];
        $uri .= '?'.http_build_query($_REQUEST);

    }

application/config/config.php に文字列を追加します

$config['cache_query_string'] = true;

GET、POST、COOKIE .... で動作します。GET のみが必要な場合は、$config['cache_query_string'] = true; だけです。- 足りる

于 2017-10-04T14:35:18.130 に答える
0

クラスのメソッド自体の内部でHooks呼び出すため、キャッシュの書き込みを防ぐための簡単な方法は見つかりませんでした。_write_cache()_display()CI_Output

offset迅速かつ最も簡単な解決策として、クエリ文字列パラメーターに変数が定義されている場合(私の場合、ページネーションに必要なため)、キャッシュを表示してキャッシュを書き込むための 2 つの条件を追加しました。

編集: system/core/Output.php

特定のパラメータが見つかった場合、キャッシュへの書き込みを防止する条件を追加します。GET

function _write_cache($output)
{
    if (isset($_GET['offset']) AND ! empty($_GET['offset']))
    {
        log_message('debug', " Don't write cache please. As as its matching condition");
        return;
    }
    ...
    ...
}

特定のパラメータが見つかった場合、 cache を表示しないように条件を追加します。GET

function _display_cache(&$CFG, &$URI)
{
    if (isset($_GET['offset']) AND ! empty($_GET['offset']))
    {
        log_message('debug', " Don't display cache please. As as its matching condition");
        return FALSE;
    }
    ...
    ...
}
于 2014-11-12T12:44:44.310 に答える