ユーザーがサーバー経由でファイルをダウンロードできるようにするために、次のコードがあります。
$ch_2 = curl_init();
curl_setopt($ch_2, CURLOPT_USERAGENT, 'Mozilla/4.0');
curl_setopt($ch_2, CURLOPT_URL, $download_link);
curl_setopt($ch_2, CURLOPT_AUTOREFERER, true);
curl_setopt($ch_2, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch_2, CURLOPT_COOKIESESSION, false);
curl_setopt($ch_2, CURLOPT_FAILONERROR, true);
curl_setopt($ch_2, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch_2, CURLOPT_FORBID_REUSE, true);
curl_setopt($ch_2, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch_2, CURLOPT_NOSIGNAL, true);
curl_setopt($ch_2, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch_2, CURLOPT_CONNECTTIMEOUT, 60);
curl_setopt($ch_2, CURLOPT_TIMEOUT, 86400);
curl_setopt($ch_2, CURLOPT_LOW_SPEED_LIMIT, 10240);
curl_setopt($ch_2, CURLOPT_LOW_SPEED_TIME, 60);
curl_setopt($ch_2, CURLOPT_MAX_RECV_SPEED_LARGE, 500);
curl_exec($ch_2);
$curl_errno_2 = curl_errno($ch_2);
curl_close($ch_2);
これらのファイル ($download_link にリンクされています) は非常に大きく、約 1 ~ 3 GB です。
このコードは正常に動作しますが、私の問題は、ユーザーがダウンロードを切断または中止した場合、サーバーが完全なファイル ($download_link) を受信するまでスクリプトが停止しないことです。
"ignore_user_abort(true)" を設定するとスクリプトが停止しますが、スクリプトでクライアントの切断やダウンロードの中止を確認し、これを処理できますか? たとえば、MySQLデータベース エントリなどを更新しますか?
たとえば、「readfile()」または fopen、fread を使用してこのコードを変更できることはわかっていますが、このcURLコードを使用します (そして使用する必要があります)。
ユーザーがIP アドレスごとに 1 つのダウンロード接続のみを許可するため、このユーザーの切断またはダウンロードの中止を確認することはできますか? したがって、ダウンロードが中止された場合、MySQL データベースを更新して、この IP アドレスからのダウンロード接続を管理することはできません。