1

TransientAPIを使用してWebページキャッシュを作成するのに苦労しています。ソースコード全体を保存しようとすると、問題が発生します。WordPressが内部的にフォーマットを修正しているのではないかと思います。その場合、データをそのまま保存する良い方法はありますか?

以下のコードはプラグインとして実行する準備ができており、問題を示しています。キャッシュが作成されていない場合はWebページが表示されますが、キャッシュが作成されてキャッシュされたデータを表示しようとすると、空白のページが表示されます。

<?php
/* Plugin Name: Sample Transient */

add_action('admin_menu', 'sample_transient_menu');
function sample_transient_menu() {
    add_options_page(
        'Sample Transient', 
        'Sample Transient', 
        'manage_options',
        'sample_transient', 
        'sample_transient_admin');
}
function sample_transient_admin() {
    ?>
    <div class="wrap">
    <?php

        $strTransient = 'sample_transient_html';
        $html = get_transient($strTransient);       
        if( false === $html ) {
            echo 'cache is not used: ' . $strTransient . '<br />';      
            $html = wp_remote_get('http://www.google.com'); 
            $html = $html['body'];
            // $html = '<div>hello world</div>'; // <-- this works fine
            set_transient($strTransient, htmlspecialchars($html), 60 );

            $tmp = get_transient($strTransient);
            if (false === $tmp)
                echo 'transient is not saved.';
            else
                echo 'transient is now saved: ' . $strTransient;    
        } else 
            echo 'cache is used. <br />';
        print_r(htmlspecialchars_decode($html));
    ?>
    </div>
    <?php
}

[編集]また、誰かがエンコーディングの問題の解決策を提供してくれれば幸いです。現在、壊れた文字が表示されています。

4

1 に答える 1

0

文字列の暗号化はうまくいきました。速度はわかりませんが。

<?php
/* Plugin Name: Sample Transient */

add_action('admin_menu', 'sample_transient_menu');
function sample_transient_menu() {
    add_options_page(
        'Sample Transient', 
        'Sample Transient', 
        'manage_options',
        'sample_transient', 
        'sample_transient_admin');
}
function sample_transient_admin() {
    ?>
    <div class="wrap">
    <?php

        $strTransient = 'sample_transient_html3';
        $key = 'sample_transient';
        $html = get_transient($strTransient);   
        if( false === $html ) {
            echo 'cache is not used: ' . $strTransient . '<br />';      
            $html = wp_remote_get('http://www.google.com'); 
            $html = $html['body'];  
            $savehtml = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $html, MCRYPT_MODE_CBC, md5(md5($key))));
            set_transient($strTransient, $savehtml, 60 );
        } else {
            echo 'cache is used. <br />';
            $html = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($html), MCRYPT_MODE_CBC, md5(md5($key)));  
        }
        print_r($html);
    ?>
    </div>
    <?php
}

参考:PHPを使用してパスワードを暗号化および復号化する最良の方法は?

于 2012-09-13T22:49:59.803 に答える