cakephp 2.5.3での出来事です
public function download($path)
{
// レイアウトの無効
$this->autoRender = false;
if( file_exists($fileName) === TRUE )
{
$this->response->file($path);
$this->response->download(basename($path));
return $this->response;
}
}
なんてすれば、ファイルダウンロードできるはずが
404エラーになる..
ソースコードを追うと
//lib/Cake/Network/CakeResponse.php L1347
$file = new File($path);
if (!$file->exists() || !$file->readable()) {
if (Configure::read('debug')) {
throw new NotFoundException(__d('cake_dev', 'The requested file %s was not found or not readable', $path));
}
throw new NotFoundException(__d('cake', 'The requested file was not found'));
}
if (!$file->exists() || !$file->readable()) {
でエラーに
Fileモデルを追っていると
//lib/Cake/Utility/File.php L86
public function __construct($path, $create = false, $mode = 0755) {
$this->Folder = new Folder(dirname($path), $create, $mode);
if (!is_dir($path)) {
$this->name = basename($path);
}
$this->pwd();
$create && !$this->exists() && $this->safe($path) && $this->create();
}
で、$this->name = basename($path);
で
.txtになってました
ロケールの問題でした..
以前公開したこちらで解決です
phpのbasenameはロケール次第で日本語が扱えない