概要
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が見られるようになった。