2

我有一个 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%)。我不知道为什么。发送给用户的文件范围从非常小到非常大(在这两种情况下它们都工作得很好,所以我看不出大文件(或小文件)会如何破坏代码)。

有什么想法吗?我希望我已经很好地解释了自己

4

1 回答 1

0

我需要查看更多代码,例如打开/读取文件以进一步帮助您,但是如果您真的想确定而不依赖于一个 shutdown_fn() 函数,那么为什么不自己在末尾也调用它剧本?重置 shutdown_fn() 中的布尔值,这样每当触发实际关闭时,您的 sql 查询就不会运行两次。

于 2013-10-17T15:17:32.380 回答