サイトのアプリdata
内に、Web ルート内にないフォルダがあります。これはセキュリティを強化するために行われるため、特定のユーザーのみがアクセスできます。CakePHPのドキュメントを見て、私が使用したコードは次のとおりです。
foreach($ImageToSort as $FileDisplayKey => $FileDisplayData) {
$FileName = $ImageToSort[$FileDisplayKey]['Fileinfo']['filename'];
$WholePathName = 'data/'.$FileName;
}
$this->response->file($WholePathName);
return $this->response;
ファイルをロードしますが、ビュー内にはロードしません (上記のコードはビュー$ImageToSort
内にあり、コントローラー内の検索呼び出しから設定されます)。
では、何らかのループを使用して webroot 内に存在しないファイルをロードするにはどうすればよいでしょうか。それにより、ファイルを表示して、選択した方法で自分のサイトに配置できます。
PS。誰かがファイルを取得できるようにするためにファイルの名前を知るだけでよいため、ファイルを webroot フォルダー内に配置することはできません。これらのファイルへのアクセスは、選択した少数に限定する必要があります。
与えられた助けに感謝します。
グレン
アップデート:
私は2.4を使用していますが、メディアビューを読んだところ、使用すべきものではありませんが、「ファイルの送信」はそれらを置き換えた呼び出しです。私は次のコードでそれらを使用しようとしました:
$this->viewClass = 'Media';
$params = array(
'id' => $FileName,
'name' => 'example',
'extension' => 'jpg',
'path' => APP . 'uploads/test' . DS
);
$this->set($params);
debug($params['id']);
$name = $params['id'];
$path = $params['path'];
$filename = $path.$name;
//echo 'name::' .$name;
echo "<img src=";
echo $filename;
echo ">";
ファイルを に配置しない限り、ファイルを見つけることができず、/webroot/data/test
正常に表示されます。しかし、それはまったく無意味ですか?セキュリティ上の問題から、選択したファイルを表示するには、選択したユーザーのみが必要です。
次のコードは、/app/data/test
パス内のファイルを表示する際に機能します。
$this->autoRender = false;
$this->response->file(Configure::read('uploads').$WholePathName);
ただし、このコードをコントローラーまたはビューで使用しても違いはありません。ファイルのみを表示し、レイアウト、スタイル、タイトルなどは表示しません。繰り返しますが、これは完全に無意味です。
ファイルへのアクセスを維持し、必要なファイル/フォルダーを読み取る方法が必要です。
グレン