我有一个 PHP 脚本,它向用户输出一个文件(作为下载),它也用于记录用户正在下载的内容。
基本结构是这样的:
set_time_limit(0);
ignore_user_abort(true);
register_shutdown_function('shutdown_fn'); //as a fail safe (i think)
//some other code here
//do some mysql queries
while(!feof($fh) && !connection_aborted()) {
echo fread(....);
ob_flush;
ob_end_flush;
sleep(1);
}
fclose($fh);
//do some more mysql queries here and set a boolean to track if it was done successfully
function shutdown_fn () {
//check boolean to see if queries failed, if so, do them here
}
上面的代码似乎在 99% 的情况下都可以正常工作。但是,在某些情况下,第二组查询根本不执行(另外 1%)。我不知道为什么。发送给用户的文件范围从非常小到非常大(在这两种情况下它们都工作得很好,所以我看不出大文件(或小文件)会如何破坏代码)。
有什么想法吗?我希望我已经很好地解释了自己