3つのオプションがあります。
- Webルートの外部のディレクトリへのアクセスをURL経由で表示できるようにするmod_rewriteルールを作成します。このように、画像はPHPスクリプトを介して出力する必要はありません
- Webルートの外部のディレクトリを指すシンボリックリンクをWebルートの内部に作成します。このように、画像はPHPスクリプトを介さずに、Apacheによって直接出力されます。ここで「プラグインアセット」の手順に従うことができます:http://book.cakephp.org/2.0/en/plugins.html#plugin-assets
- PHPでファイルを読み取り、関数などを使用してPHPで画像(のサイズ変更バージョン)を出力し
imagejpeg()
ます。これを機能させるには、「レイアウト」を使用せずに画像を出力し、適切な応答ヘッダーを設定する必要があります。'response'オブジェクトの詳細については、http://book.cakephp.org/2.0/en/controllers/request-response.html#sending-filesを参照してください。
現時点では例を書く時間がありませんが、必要に応じていくつかのポインタを提供できます
アップデート
MediaViewはCakePHP2.3で非推奨になりましたが、ファイルのダウンロードを自分で処理する方法について、MediaViewから「学ぶ」ことができます。MediaViewの「魔法」のほとんどはResponse-objectに集中しています。これは、Cake内(コントローラー内でも)のほぼすべてのオブジェクトで使用できます。de MediaViewを、ファイルを出力/送信するためにコントローラーに接続できるコンポーネントに変換するのはおそらく簡単です。
MediaViewのソースはここにあります:http:
//api.cakephp.org/2.2/source-class-MediaView.html#23-242
また、response-objectを介したファイルの送信に関する追加情報は、前述のリンク(http://book.cakephp.org/2.0/en/controllers/request-response.html#sending-files)にあります。
重要
あなたの質問とは直接関係ありませんが、いくつかの警告があります。
ユーザー提供のアップロードは危険です。必ずファイル名を確認し、ファイル名とパスをサニタイズしてください(ユーザーがパスを指定できる場合)。ユーザーがパス名として「../../../../」のようなものを送信できると常に想定して、その状況から身を守ってください
ユーザーがアップロードしたファイルを含むディレクトリ/URLのPHP解析を必ず無効にしてください。ユーザーがアップロードdangerous_file.php.jpg
でき、後でファイルの名前を変更できる(remove .jpg
)という状況を見てきました。
パスでPHPを無効にする方法の詳細については、次を参照してください。
ディレクトリ(すべてのサブディレクトリを含む)で.htaccessを使用してPHPを無効にする
そして、その最後の点に関して:ユーザーディレクトリ内のこれらの設定の「オーバーライド」を必ず無効にしてください(たとえば、ユーザーがファイルをアップロードできる状況を考えてみてください)。.htaccess