2011-12-22 5 views
0

私のアプリでは、「クライアント」という名前のモジュールがあります。サブディレクトリ "statements"を作成し、その下に "accounts"と "account_123"を作成し、このディレクトリにclint 123の文を表すpdfsを作成したいとします。 構造クライアントは次にacount_XXXとpdfファイルを処理します。Zend MVCのリンクを介してファイルを見る

問題

<a href=What_is_the_url_for">statement_1.pdf</a>? 

ビーイングMVC私は少しprogessを作っています。

私は構造体をpublicに移動しましたが、ホスト名i.r.を動的に取得できないことを除いて、ほとんど構造化されていませんでした。 www.hostnam.com/client/statement ....

私はこれがセキュリティ上の問題であることを知っていますので、クライアントモジュールの下にディレクトリを戻しました。

助けがありがとうございます。

限り、私は(すでに書いたようにあるため、セキュリティ上の問題の)あなたは「アプリケーション」ディレクターの下に置かれたファイルへの直接リンクを配置することはできません知っているよう

TIAエフライム

答えて

0

ので、可能な解決策の一つがにありますファイルの内容を読み込んで応答オブジェクトに返すアクションを作成します。

ユーザーがこのアクションへのリンクをクリックすると、提供されたファイルを開く/保存するウィンドウが表示されます。

例:

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

    /* ... */ 

    $file = "FILENAME WITH_PATH"; 
    $response = $this->getResponse(); 
    $response->setHeader('Cache-Control', 'public', true); 
    $response->setHeader('Content-Description', 'public', true); 
    $response->setHeader('Content-Disposition', 'attachment; filename=' . FILENAME, true); 
    $response->setHeader('Content-Type', FILETYPE, true); 
    $response->setHeader('Content-Transfer-Encoding', 'binary', true); 
    $response->setHeader('Content-Length', filesize($file), true);      
    $response->setBody(file_get_contents($file)); 
} 

その値は、アプリケーションに依存するため、私は、コードの上にいくつかの定数を入れます。

+0

[開く/保存]ダイアログボックスを非表示にすることはできますか?つまり、私はストレートPHP非MVCアプリケーションでできるようにファイルを表示するだけですか? – Ephraim

+0

私はあなたが達成したいことを完全に理解していません - あなたは説明できますか? pdfファイルの内容をWebページに表示しますか?あなたがダウンロードできるファイルへのリンクを作成したいと思っていました。 –

+0

前者が正しいです。 Firefoxは、開くか保存するかを選択できるダイアログを開きます。私はダイアログなしでAcrobatを開いてPDFを開くのが好きです。コンテンツタイプと何か 'application/pdf'を試しましたが、うまくいかなかったのです。エイミーのアイディアTIA。 – Ephraim

関連する問題