これは、phpスクリプトを使用してサーバーからファイルをダウンロードすることに関する質問です。ユーザーがダウンロード リンクをクリックすると、download.php
ファイルに処理され、それを使用しheader
てダウンロードが開始されました。
ファイルをダウンロードした後、ファイルには 1 つの関数があり、ダウンロードしたファイルdownload.php
に関する mysql データベースを更新し、ユーザーのアカウントからお金を差し引きます。すべて正常に動作します。
現在、ユーザーが PC にダウンロード マネージャーをインストールしている場合に問題が発生します。ブラウザーとダウンロード マネージャーの両方でダウンロードが開始される場合があります。そのため、最後にデータベースに 2 つのダウンロード エントリがあり、ユーザーのアカウントから 2 回お金が差し引かれます。
質問: 一度に 1 つのダウンロードだけを開始する方法はありますか? または、このことを行う他の方法はありますか?
ユーザーに提供するダウンロード リンク。
<a href='download.php?id=1'>Download Test Video</a>
ファイルのダウンロードに使用しているスクリプト。(ダウンロード.php)
$file = "c:/test.avi"; // $file = $_GET['id'];
$title = "Test Video";
header("Pragma: public");
header('Content-disposition: attachment; filename='.$title);
header("Content-type: ".mime_content_type($file));
header("Content-Length: " . filesize($file) ."; ");
header('Content-Transfer-Encoding: binary');
ob_clean();
flush();
$chunksize = 1 * (1024 * 1024); // how many bytes per chunk
if (filesize($file) > $chunksize) {
$handle = fopen($file, 'rb');
$buffer = '';
while (!feof($handle)) {
$buffer = fread($handle, $chunksize);
echo $buffer;
ob_flush();
flush();
}
fclose($handle);
} else {
readfile($file);
}
record_download('user id', 'file id');