これは、他の回答をベースとして使用することで実行できます public_html ディレクトリ外のファイルへのダウンロード アクセスを許可するにはどうすればよいですか? readfile( $filename )
と置き換えreadfileWhileConnected( $filename )
ます:
EOF までファイルを読み取るか、切断します。
/** Read $filename until EOF or disconnect,
* if disconnect then error_log() count of bytes read already
*/
function readfileWhileConnected( $filename ) {
// Save and set ini values:
$user_abort = ignore_user_abort();
ignore_user_abort(false);
// Get file size and set bytes_sent to zero:
$fsize = filesize($filename);
$bytes_sent = 0;
// Open file:
$f = fopen($filename, 'r');
// Read file:
while($chunk = fread($f, 1024)) {
// Check if connection is still open:
if(!connection_aborted()) {
// Send $chunk to buffer (if any), then flush() buffers:
echo $chunk;
flush();
// Add $chunk length to $bytes_sent
$bytes_sent += strlen($chunk);
} else {
// Close file:
fclose($f);
error_log("Connection closed at $bytes_sent/$fsize");
exit();
}
// Close file:
fclose($f);
// Reset ini values:
ignore_user_abort($user_abort);
return $bytes_sent;
}
}
新しい光沢のあるclass myNewSuperDownloadHandlerClass { ... }
準備ができたら、ここでfiledownload.php
説明されているダウンロードのみを提供することを確認するか、うまくいった場合はそれを使用します。接続ステータスのポーリングが必要なすべてのダウンロードに使用されることを確認してください.myNewSuperDownloadHandlerClass()
readfileWhileConnected()
ユーザーが接続を閉じた場合にトリガーされるコールバックを簡単に追加できます。ここには2つの出口ポイントのみがあります。(頻繁になどの多くの関数を見return false; return true; return null; return false; return true;
ました..)