用户停止执行时register_shutdown_function()

时间:2013-02-03 22:12:16

标签: php pdo

我使用PHP脚本提供下载,我想监控我使用的流量。每次向用户发送一个数据时,我都会更新一个名为$bytes的变量,我想在下载完成后将其记录到数据库中。为此,我使用以下函数:

register_shutdown_function(function() {
    global $bytes;

    /* Save the traffic to the database */
    $db = new PDO('mysql:host=localhost;dbname=test', 'root', '');
    $st = $db->prepare('INSERT INTO `stats` (`date`, `bytes`)
                        VALUES (CURDATE(), :bytes)
                        ON DUPLICATE KEY
                        UPDATE `bytes` = `bytes` + :bytes');
    $st->bindParam(':bytes', $bytes);
    $st->execute();
    $st = null;
    $db = null;
});

它完美地运行,但是如果用户在完成之前取消下载该功能永远不会被调用。例如,如果用户下载9MB的10MB文件然后取消,则9MB永远不会记录到数据库中。虽然大多数用户都没有取消下载,但我希望尽可能准确地记录日志。

当用户像这样停止执行时,有没有办法运行函数?

0 个答案:

没有答案