我使用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永远不会记录到数据库中。虽然大多数用户都没有取消下载,但我希望尽可能准确地记录日志。
当用户像这样停止执行时,有没有办法运行函数?