あるファイルのためにPHPで動的ダウンロードリンクを作成する方法や、その時間が経過した後にダウンロードリンクが失効する方法はありますか?その期間が過ぎると、ダウンロードリンクが変更されます。PHPでダイナミックダウンロードリンクを作成するには
実際には、ダウンロードリンクには特定のメールでしかアクセスできないようにする必要があります。サイズのため、そのファイルを添付ファイルとして追加することはできません。
これで私を助けることができますか?
あるファイルのためにPHPで動的ダウンロードリンクを作成する方法や、その時間が経過した後にダウンロードリンクが失効する方法はありますか?その期間が過ぎると、ダウンロードリンクが変更されます。PHPでダイナミックダウンロードリンクを作成するには
実際には、ダウンロードリンクには特定のメールでしかアクセスできないようにする必要があります。サイズのため、そのファイルを添付ファイルとして追加することはできません。
これで私を助けることができますか?
一つの解決策:
データベーステーブルを作成するw大きな一意のID(ランダム)、およびダウンロードするファイルの名前/場所/コンテンツを格納します。有効期限も含めてください。
id | filename | expires
----------------------+--------------------+--------------------
fsdhfs7dfsniuf92un3f2 | secret.doc | 2012-03-23 23:32:32
sdf8shdf829nf32ufn23f | secret2.doc | 2012-03-13 23:32:33
メールエンドユーザーへのリンクを...リンクのようなものでなければなりません:
見栄えの良いリンクとパスをキャプチャしますApacheの書き換えルール(mod_rewriteの)を使用しhttp://yoursie.com/download/fsdhfs7dfsniuf92un3f2
それPHPのページへ:そのスクリプトで
RewriteEngine on
RewriteRule ^/download/([a-z0-9]{20})$ /download.php?id=$1
、download.php
、$_GET['id']
を見てください。レコードを検索するデータベースクエリを実行します。有効期限を確認してください。すべてがOKならば、次に進みます。
PHPスクリプトを使用して正しいヘッダーを出力してファイルをダウンロードするか、nginxのようなフロントエンドプロキシに内部リダイレクトを送信します。これはダウンロードプロセスをnginxにオフロードし、 。
いずれの方法でも、エンドユーザーに送信できる安全で有効期限のあるリンクがあります。
注意してください!
はい、データベーステーブルを使ってリンクの有効期限を追加するとうまくいきます...しかし、ユーザーがメールからそのリンクをクリックした場合、特定のメールのダウンロードリンクがわかる方法はありますか? – user434509
@ user434509: dbテーブルを作成し、送信先の電子メールアドレスごとに固有のリンクを生成します。 – gahooa
確かに、一意の識別子と有効期限のタイムスタンプとともに、ファイルへのパスをデータベースに格納します。次に、ユーザーがget変数内の一意のIDを持つリンクにアクセスすると、タイムスタンプをチェックしてファイルをフェッチするか、それに応じてエラーを表示します。
データベーステーブル:?
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
ファイルを置くデータベース、タイムスタンプ、ヒットをテーブルにインストールすることができます。スクリプトでは、タイムスタンプ+ 86400 *日(86400は1日の秒数)を確認できます。その時間枠内にダウンロードがある場合は許可され、そうでない場合はダウンロードが許可されます。 readfile()を使用してダウンロードするファイルを出力し、header()呼び出しを使用してエンコードを調整することができます。より具体的なヘルプのために、いくつかのコードを投稿する必要があります。
注:cronジョブの外観を自動化する必要がある場合は、
ここにたくさんお尋ねします。あなたが苦労している特定のコードがありますか? PHPがこれらのすべてを行うことができるかどうかを知りたければ、そうすることができます。 – user783322
私は以下の5つのステップを実行して、実際に素晴らしいソリューションを手に入れることができます。あなたは、ドキュメントを読んで詳細を理解する必要がありますが、詳細については私の答えにコメントしてください。 – gahooa