2012-03-15 10 views
2

あるファイルのためにPHPで動的ダウンロードリンクを作成する方法や、その時間が経過した後にダウンロードリンクが失効する方法はありますか?その期間が過ぎると、ダウンロードリンクが変更されます。PHPでダイナミックダウンロードリンクを作成するには

実際には、ダウンロードリンクには特定のメールでしかアクセスできないようにする必要があります。サイズのため、そのファイルを添付ファイルとして追加することはできません。

これで私を助けることができますか?

+0

ここにたくさんお尋ねします。あなたが苦労している特定のコードがありますか? PHPがこれらのすべてを行うことができるかどうかを知りたければ、そうすることができます。 – user783322

+0

私は以下の5つのステップを実行して、実際に素晴らしいソリューションを手に入れることができます。あなたは、ドキュメントを読んで詳細を理解する必要がありますが、詳細については私の答えにコメントしてください。 – gahooa

答えて

5

一つの解決策:

  1. データベーステーブルを作成するw大きな一意のID(ランダム)、およびダウンロードするファイルの名前/場所/コンテンツを格納します。有効期限も含めてください。

    id     | filename   | expires 
    ----------------------+--------------------+-------------------- 
    fsdhfs7dfsniuf92un3f2 | secret.doc   | 2012-03-23 23:32:32 
    sdf8shdf829nf32ufn23f | secret2.doc  | 2012-03-13 23:32:33 
    
  2. メールエンドユーザーへのリンクを...リンクのようなものでなければなりません:

    見栄えの良いリンクとパスをキャプチャしますApacheの書き換えルール(mod_rewriteの)を使用し
    http://yoursie.com/download/fsdhfs7dfsniuf92un3f2 
    
  3. それPHPのページへ:そのスクリプトで

    RewriteEngine on 
    RewriteRule ^/download/([a-z0-9]{20})$ /download.php?id=$1 
    
  4. download.php$_GET['id']を見てください。レコードを検索するデータベースクエリを実行します。有効期限を確認してください。すべてがOKならば、次に進みます。

  5. PHPスクリプトを使用して正しいヘッダーを出力してファイルをダウンロードするか、nginxのようなフロントエンドプロキシに内部リダイレクトを送信します。これはダウンロードプロセスをnginxにオフロードし、 。

いずれの方法でも、エンドユーザーに送信できる安全で有効期限のあるリンクがあります。

注意してください!

+0

はい、データベーステーブルを使ってリンクの有効期限を追加するとうまくいきます...しかし、ユーザーがメールからそのリンクをクリックした場合、特定のメールのダウンロードリンクがわかる方法はありますか? – user434509

+0

@ user434509: dbテーブルを作成し、送信先の電子メールアドレスごとに固有のリンクを生成します。 – gahooa

2

確かに、一意の識別子と有効期限のタイムスタンプとともに、ファイルへのパスをデータベースに格納します。次に、ユーザーがget変数内の一意のIDを持つリンクにアクセスすると、タイムスタンプをチェックしてファイルをフェッチするか、それに応じてエラーを表示します。

0

データベーステーブル:?

ID ファイル(公的にアクセス可能なパスのうち) は次にスクリプトを取得-file.phpを持って

を満了し、ID = XXXXXX

<?not-real-code 
Delete everything expired from table 

Look up record for id=XXXXXXX 

If exists then use something like readfile() to read and output file 

Delete record in table 
0

ファイルを置くデータベース、タイムスタンプ、ヒットをテーブルにインストールすることができます。スクリプトでは、タイムスタンプ+ 86400 *日(86400は1日の秒数)を確認できます。その時間枠内にダウンロードがある場合は許可され、そうでない場合はダウンロードが許可されます。 readfile()を使用してダウンロードするファイルを出力し、header()呼び出しを使用してエンコードを調整することができます。より具体的なヘルプのために、いくつかのコードを投稿する必要があります。

0
  1. Webサーバー上にファイルが存在しないことを示すindex.phpファイルを含むフォルダを作成します。
  2. 必要に応じて、index.phpを指し示す.htaccessファイルを作成します。
  3. 人がダウンロードしたいファイルをWebサーバー上のフォルダに追加します。
  4. リンク先のメールを送信してください。
  5. 時間がなくなったと感じたら、ファイルと人はindex.phpに移動します。

注:cronジョブの外観を自動化する必要がある場合は、

関連する問題