PHP connection_aborted()和/或register_shutdown_function间歇性地工作

时间:2013-10-17 14:35:20

标签: php

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

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

1 个答案:

答案 0 :(得分:0)

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