我有一个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%)。我不知道为什么。发送给用户的文件范围从非常小到非常大(在两种情况下它们都能正常工作,因此我无法看到大文件(或小文件)如何破坏代码)。
有什么想法?我希望我已经很好地解释了自己
答案 0 :(得分:0)
我需要看一些更多的代码,比如打开/读取文件以进一步帮助你,但是如果你真的想确定并且不依赖于一个shutdown_fn()函数那么为什么不自己调用它呢?脚本的结尾?重置shutdown_fn()中的布尔值,这样每当触发实际关闭时,sql查询都不会运行两次。