概要
cakephp3でpdfを外部からアクセスできないようにしたかった
でもAppControllerの使い方がいまいちわからなかったので簡易的に対応した。
普通のPHPでも使える気がする。
やったこと
pdfファイルへのアクセス制限
.htaccessに下記を書き込む
<Files ~ "\.(pdf)$"> deny from all </Files>
書くと.pdfファイルにアクセスした際に
————–
Forbidden
You don’t have permission to access /■■.pdf on this server.
————–
と出るようになる
アクセス権限判断用セッション代入
あまり良くないき気しかしないけど今回はpdf作成時にセッションにファイル名を入れることにした。
$rand = substr(str_shuffle('1234567890abcdefghijklmnopqrstuvwxyz'), 0, 10);
$filename = $rand.'.pdf';
$file_name = microtime().'.pdf';
$_SESSION['pdf_name'] = $file_name;
ダウンロードURLを作る
適当なコントローラーにPDF生成用の関数を書いた。
public function pdf(){
$this->autoRender = FALSE;
$dir = "/var/www/html/";
if (isset($_SESSION['pdfName']) && strpos($_SESSION['pdfName'],'.pdf') === false){
die('このファイルにアクセスする権限がありません');
}
if(! file_exists ( $dir . $_SESSION['reportPdfName'] )){
die('PDF作成に失敗しました');
}
header("Content-Type: application/pdf");
readfile( $dir . $_SESSION['reportPdfName'] );
}
これでこの コントローラー/pdf にアクセスするとPDFが見られるようになった。
