附件记录删除联动扩展
通过 Filter_Plugin_Upload_Del 接口,可以在 Z-BlogPHP 删除附件的数据库记录时执行自定义逻辑。该接口在附件对象的 Del 方法内部、默认数据库删除之前触发,此时附件的数据库记录与物理文件都还存在。核心调用点是后台删除附件(DelUpload 函数)与删除用户时清理其名下附件(DelMember_AllData 函数)。
接口信息
| 接口 | 参数 | 说明 |
|---|---|---|
Filter_Plugin_Upload_Del | $upload | Upload 类的 Del 方法接口 |
完整案例
下例在附件数据库记录被删除时,记录删除日志(可作为同步清理外部系统数据的依据):
php
<?php
RegisterPlugin("demoAPP", "ActivePlugin_demoAPP");
function ActivePlugin_demoAPP()
{
Add_Filter_Plugin('Filter_Plugin_Upload_Del', 'demoAPP_Upload_Del');
}
function demoAPP_Upload_Del(&$upload)
{
global $zbp;
$log = date('Y-m-d H:i:s') . ' upload record deleted #' . $upload->ID . ' ' . $upload->Name . PHP_EOL;
@file_put_contents($zbp->usersdir . 'plugin/demoAPP/upload.log', $log, FILE_APPEND);
return true;
}注意事项
- 后台删除附件的执行顺序是先调用
Del删除数据库记录,再调用DelFile删除物理文件,本接口只覆盖前者,物理文件删除对应Filter_Plugin_Upload_DelFile接口; - 用
PLUGIN_EXITSIGNAL_RETURN信号拦截本接口只能跳过数据库记录删除,不会阻止随后的物理文件删除,容易造成「记录还在、文件已删」的不一致状态,拦截时务必两端一起考虑; - 回调触发时附件数据完整可读,可在此记录
ID、Name、FullFile等信息供后续处理; - 删除用户时系统会逐个删除其名下附件,本接口会随每个附件各触发一次。