3

私は次の行動をとっています:

public function viewImageAction()
{
    $this->_helper->layout()->disableLayout();
    $this->_helper->viewRenderer->setNoRender();

    $filename = sanitize_filename($this->_request->getParam('file'), 'jpg');
    $data = file_get_contents(APPLICATION_PATH . '/../private-files/fans-pictures/' . $filename);
    $this->getResponse()
         ->setHeader('Content-type', 'image/jpeg')
         ->setBody($data);
}

そして、アプリケーションを開始する前のindex.phpには、次のものがあります。

/** Zend Cache to avoid unecessary application load **/
require_once 'Zend/Cache.php';

$frontendOptions = array(
'lifetime' => 3600,
'default_options' => array(
    'cache' => $cache_flag,
    'cache_with_cookie_variables' => true,
    'make_id_with_cookie_variables' => false),
'regexps' => array(
    '^(/.+)?/admin/?' => array('cache' => false),
    '^(/.+)?/pictures/view-image/?' => array('cache' => true),
    '^(/.+)?/authentication/?' => array('cache' => false),
    '^(/.+)?/fan-profile/?' => array('cache' => false),
    '^(/.+)?/fan-registration/?' => array('cache' => false))
);

$backendOptions = array(
'cache_dir' => APPLICATION_PATH . '/cache/pages/');

$cache = Zend_Cache::factory(
  'Page', 'File', $frontendOptions, $backendOptions
);

$cache->start();

キャッシュは正常に機能しますが、URLにアクセスしようとするとpublic/admin/pictures/view-image/file/63.jpg、ヘッダーにtext/htmlnotが付いてくるようになりimage/jpegます。

私は何か間違ったことをしていますか?

編集済み

私はもう試した:

'memorize_headers' => array('Content-type')

しかし、何も...

また、アプリケーションを実行してセッションを確認する必要があるため、このタイプのキャッシュ(アプリケーションの開始前)を管理領域で実行できないことに気付きました。したがって、関連するすべてのコンポーネントの負荷を回避するために、できるだけ早くチャッシュを配置する必要があります。

任意のヒント?

4

1 に答える 1

1

解決

問題はmemorize_headersパラメータの場所にあります。

私はこれを試していました:

$frontendOptions = array(
'lifetime' => 3600,
'default_options' => array(
    'cache' => $cache_flag,
    'cache_with_cookie_variables' => true,
    'memorize_headers' => array('Content-Type', 'Content-Encoding'),
    'make_id_with_cookie_variables' => false),
'regexps' => array(
    '^(/.+)?/admin/?' => array('cache' => false),
    '^(/.+)?/admin/pictures/view-image/?' => array('cache' => true),
    '^(/.+)?/authentication/?' => array('cache' => false),
    '^(/.+)?/fan-profile/?' => array('cache' => false),
    '^(/.+)?/fan-registration/?' => array('cache' => false))
);

これの正しい場所はdefault_options重要ではありません:

$frontendOptions = array(
'lifetime' => 3600,
'memorize_headers' => array('Content-Type', 'Content-Encoding'),
'default_options' => array(
    'cache' => $cache_flag,
    'cache_with_cookie_variables' => true,
    //'cache_with_session_variables' => true,
    'make_id_with_cookie_variables' => false),
'regexps' => array(
    '^(/.+)?/admin/?' => array('cache' => false),
    '^(/.+)?/admin/pictures/view-image/?' => array('cache' => true),
    '^(/.+)?/authentication/?' => array('cache' => false),
    '^(/.+)?/fan-profile/?' => array('cache' => false),
    '^(/.+)?/fan-registration/?' => array('cache' => false))
);

今では動作します。

于 2010-11-26T19:28:11.993 に答える