ログイン済みユーザーだけがダウンロードできるファイルを実現します。
本来ならば、ファイルはドキュメントルートの外に置いて、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を読み込む前に実行されるだけなので、出力等はいりません。


コメント