系统终结监听扩展
通过 Filter_Plugin_Zbp_Terminate 接口,可以在 Z-BlogPHP 的 Zbp::Terminate() 中执行收尾逻辑。该方法由 $zbp 的析构函数在脚本结束时调用,是整次请求的最后钩子之一。
接口信息
| 接口 | 参数 | 说明 |
|---|---|---|
Filter_Plugin_Zbp_Terminate | 无 | Zbp 类的终结接口 |
完整案例
下例在请求结束时把耗时与内存峰值写入统计日志(配合 Filter_Plugin_Zbp_PreLoad 记录的开始时间):
php
<?php
RegisterPlugin("demoAPP", "ActivePlugin_demoAPP");
function ActivePlugin_demoAPP()
{
Add_Filter_Plugin('Filter_Plugin_Zbp_Terminate', 'demoAPP_Zbp_Terminate');
}
function demoAPP_Zbp_Terminate()
{
global $zbp;
$start = isset($GLOBALS['demoAPP_start_time']) ? $GLOBALS['demoAPP_start_time'] : null;
$elapsed = $start ? round(microtime(true) - $start, 4) : 0;
$log = date('Y-m-d H:i:s') . ' ip=' . GetGuestIP() . ' elapsed=' . $elapsed
. 's memory=' . memory_get_peak_usage(true) . PHP_EOL;
file_put_contents($zbp->usersdir . 'plugin/demoAPP/stats.log', $log, FILE_APPEND | LOCK_EX);
}注意事项
- 触发位置在
Zbp::Terminate()内,由zblogphp.php中$zbp的析构函数__destruct()在脚本结束时调用,早于数据库连接关闭(CloseConnect)与数据库错误日志写入; - 仅当
$zbp已初始化时才会触发;回调执行时数据库对象仍可用,但应避免再执行重查询或输出内容; - 适合做统计落盘、资源释放、日志收尾等轻量操作;
- 脚本因致命错误中断时析构流程可能不完整,关键业务逻辑不要依赖本接口;
- 高并发下写文件建议加
FILE_APPEND与LOCK_EX,并定期清理日志文件。