Php readfile()和数据库插入出现问题

Php readfile()和数据库插入出现问题,php,Php,关于CodeIgniter应用程序中的一小段代码,我遇到了一个非常奇怪的问题。基本上,有一个链接到各种PDF文件的页面。当用户单击链接时,PHP解析请求,通知观察者,在数据库(活动日志)中写入单击事件,然后使用readfile()输出文件 到目前为止,一切顺利。经过测试,它就像一个符咒。PDF被输出以供下载,事件被写入数据库中 当用户单击此类链接,然后取消下载并在不晚于9-10秒的时间内单击另一个链接时,就会出现问题。发生这种情况时,事件将在数据库中注册两次 我对记录这一事件的观察家进行了三次检

关于CodeIgniter应用程序中的一小段代码,我遇到了一个非常奇怪的问题。基本上,有一个链接到各种PDF文件的页面。当用户单击链接时,PHP解析请求,通知观察者,在数据库(活动日志)中写入单击事件,然后使用
readfile()
输出文件

到目前为止,一切顺利。经过测试,它就像一个符咒。PDF被输出以供下载,事件被写入数据库中

当用户单击此类链接,然后取消下载并在不晚于9-10秒的时间内单击另一个链接时,就会出现问题。发生这种情况时,事件将在数据库中注册两次

我对记录这一事件的观察家进行了三次检查,但他们似乎没有问题。此外,视频链接还有一个类似的功能,只是它重定向到另一个页面,而不是直接输出文件,而且工作正常

几个小时的挠头之后,我发现
readfile()
函数有问题,因为如果我放入
var_dump();模具()
或任何在下载之前输出一些文本并强制其成为文本的内容,下载事件只记录一次

下面是有问题的代码:

public function downloadPDF($id = NULL)
{
    if (($id == NULL) OR (!$this->validateId($id))) {
        // redirect with error
    }   

    $item = // code for fetching the PDF properties from the DB

    $this->notify('ActivityObserver'); // writes the download event in the DB

    $file = '.' . urldecode($item['link']);
    $size = filesize($file);
    $name = urldecode(basename($file));

    header('Content-Description: File Transfer');
    header('Content-Type: application/pdf');
    header("Content-Disposition: attachment; filename=\"$name\"");
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));

    readfile($file);
    exit();
}
试着用不同的浏览器测试,结果是一样的。所有inspector工具仅显示单击时发出的一个请求

我在这张丑陋的大图上遗漏了什么?为什么它有时能写两次而不是一次

感谢您抽出时间来阅读这面文字墙