ログイン済みユーザーだけがダウンロードできるファイルを実現します。
本来ならば、ファイルはドキュメントルートの外に置いて、phpでechoするのが良いと思うけど、もろもろの事情でドキュメントルート以下に認証済みのにアクセスできるディレクトリを作ります。
.htaccess
AddType application/x-httpd-php .xls
php_value auto_prepend_file "/var/www/.../auth_download.php"
.xlsファイルはphpとして実行する宣言
auth_download.php
<?php define('APPLICATION_PATH', realpath(dirname(__FILE__))); set_include_path(implode(PATH_SEPARATOR, array( APPLICATION_PATH, realpath(APPLICATION_PATH . '/../library'), ))); require_once 'Zend/Loader/Autoloader.php'; $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->setFallbackAutoloader(true); Zend_Session::setOptions(array( 'name' => 'zfsession', 'remember_me_seconds' => 60 * 60 * 24 * 15, 'save_path' => APPLICATION_PATH . "/temporary/sessions" )); Zend_Session::start(); //認証情報を保持しているか $auth = Zend_Auth::getInstance(); $auth->setStorage(new Zend_Auth_Storage_Session('app')); // 認証を実行 if (!$auth->hasIdentity()) { // Access forbidden: header('HTTP/1.1 403 Forbidden'); die('403 Access Forbidden'); } header('Content-Type: application/force-download');
このサンプルはZend_Authが本体で動いていて、単独PHPに持ってきた例です。
.htaccessを認証かけたいディレクトリに入れておいて、特定の拡張子は必ずこれが実行されるようにします。
認証プログラムを走らせて、認証済みだったらヘッダーにダウンロードを付けておきます。
.xlsを読み込む前に実行されるだけなので、出力等はいりません。
コメント