kawama.jp

[php]ファイルをテンポラリなパスでダウンロードさせる

カテゴリ: PHP — タグ: , , , — 2010年12月29日 23:00 — Comments (0)hatebu count

publicでない場所に置いてあるファイルを、ランダムなパスで一時的にダウンロードできるようにする。

というのを作りました。

ちょうど今zencartをいじっていて、ダウンロード販売機能のソースコードを参考にさせて(というかほぼそのまま使わせて)もらいました。
該当のソースコードは以下のパスにあります。
includes/modules/pages/download/header_php.php

プログラムの流れは

1.ユーザーがphpにアクセス
2.ランダムで一時ディレクトリを作成
3.作成した一時ディレクトリの中にオリジナルファイルへのシンボリックリンクを作成。
4.ユーザーをシンボリックリンクへ303リダイレクト
5.ユーザーが目的のファイルを閲覧する

となります。

それと、作成したディレクトリを定期的に削除することで、ファイルが一般に公開されてしまうことを防ぎます。

zencartではphpにアクセスがあるたびに過去に作成した一時ディレクトリを削除していますが、必要ならばcronで定期的に削除するなどの処理を組み込んでもいいと思います。

ソースはこんな感じになります。


//古いシンボリックリンクを削除
zen_unlink_temp_dir(DIR_FS_DOWNLOAD_PUBLIC);

//ディレクトリ作成
$tempdir = zen_random_name();
umask(0000);
mkdir(DIR_FS_DOWNLOAD_PUBLIC . $tempdir, 0777);

$symlink_file = DIR_FS_DOWNLOAD_PUBLIC . $tempdir . '/' . $file_name;
$redirect_link = "/pub/" . $tempdir . '/' . $file_name;

//シンボリックリンク作成
$link_create_status = @symlink($org_file, $symlink_file);

//リダイレクト
if ($link_create_status==true) {
header("HTTP/1.1 303 See Other");
header("Location: ".$redirect_link);
}

コメントはまだありません »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Copyright (C) 2002 - 2017 kawama All Rights Reserved. — Powered by WordPress