私はファイルをダウンロードしたいボタンを持ったPHPファイルを持っています。これはPHPにAJAX呼び出しを使って試してみたいさて、これは何も最初の呼び出しということですユーザがファイルをダウンロードしたかどうかを知る方法
function download_file (fileid)
{
$.ajax
({
type: "POST",
url: 'download.php',
data: {id: fileid},
success: function(data)
{
window.location = 'download.php?link='+data;
}
});
}
:
<a onclick="download_file (<?= $row["id"]?>)">Download</a>
...現在、私は次のコードを持っている、)それはより安全であると感じそしてDOWNLOAD_FILEの機能は、次のようになります
POST
要求を伴う
download.php
(場所を少し安全に保つため)
fileid
を使用して、スクリプトがデータベースからファイルの場所を取得し、AJAXスクリプトに戻します(
data
変数)。
さて次は何の成功の機能では、download.php
が再び呼び出されていることであるが、今回GET
要求と、そのファイルは、検索名前を変更(サーバーのように、彼らはランダムなファイル名を持っている)してからダウンロードされます...そのためのPHPコードは次のとおりです。
header("Cache-Control: private");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=".$file."");
header("Content-Transfer-Encoding: binary");
header("Content-Type: binary/octet-stream");
readfile ($link);
は、すべてが完璧に動作し、私の懸念はセキュリティについてですが、私は私が後にランダムでユニークなダウンロードリンクのようなものが生成されたいと、ファイルをより安全にしたいですダウンロードが完了したら、リンクはオフになっていますが、ファイルはそのまま残ります...私は別のアドレスで一時ファイルを作成し、一時ファイルを削除するためにcronジョブを使用する方法を考えましたが、しかし、それはcronジョブの時間間隔のその特定の量についてある程度時間の窓を与え、ダウンロードリンクは静的であり、サイトには適していません...私は単一のリンクが1回のダウンロードに対して有効であることを望みます(しかし、リンクはダウンロード全体のためにそこにあるはずです、すなわち、再開はサポートされるべきです)。
可能であれば、ユーザーがログインしている場合と同様に、認証を使用することもできますが、ダウンロードリンクはアクティブになりますが、ユーザーがアプリからログアウトしてダウンロードリンクを開くとすぐにどちらかログインにユーザを促したり404エラーを表示...
そして、私はまた、他の方法で同じのセキュリティを改善する方法の提案をしたい...
しかし、ユーザーがダウンロードを完了したことをどのように知っていますか? –
ダウンロードプロセスがクライアント側/ブラウザ上で完全に処理されるため、それを理解する方法はないと思います。ユーザーがダウンロードプロセスを開始した場合、ユーザーがファイルをダウンロードしたと想定するのが最も近い方法です。 – pioneer
しかし、私は10 MBの大きさのファイルを持っていますが、ユーザーのインターネット速度が本当に悪い場合、Kb/sのようにうまくいきます。その場合、ダウンロードは失敗します。 t完了...だから、転送は全くありません... –