ログイン済みユーザーだけダウンロードできるファイルをPHPとhtaccessを使って実現する

PHP

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

コメント

タイトルとURLをコピーしました