Skip to content

附件文件删除联动扩展 ​

通过 Filter_Plugin_Upload_DelFile 接口,可以在 Z-BlogPHP 删除附件的物理文件时执行自定义逻辑。该接口在附件对象的 DelFile 方法内部、默认删除文件之前触发,适用于同步清理插件为附件生成的缩略图、缓存文件,或接管云存储文件的删除。核心调用点是后台删除附件(DelUpload 函数)与删除用户时清理其名下附件(DelMember_AllData 函数)。

接口信息 ​

接口参数说明
Filter_Plugin_Upload_DelFile$uploadUpload 类的 DelFile 方法接口

完整案例 ​

下例在附件物理文件被删除时,同步删除插件为该附件生成的缩略图文件:

php
<?php

RegisterPlugin("demoAPP", "ActivePlugin_demoAPP");

function ActivePlugin_demoAPP()
{
    Add_Filter_Plugin('Filter_Plugin_Upload_DelFile', 'demoAPP_Upload_DelFile');
}

function demoAPP_Upload_DelFile(&$upload)
{
    global $zbp;
    // 同步删除插件为该附件生成的缩略图文件
    $thumb = $zbp->usersdir . 'plugin/demoAPP/thumb/' . md5($upload->Name) . '.jpg';
    if (file_exists($thumb)) {
        @unlink($thumb);
    }

    return true;
}

注意事项 ​

  • DelFile 只负责删除物理文件(默认删除目标是 $upload->FullFile),数据库记录由 Del 方法处理,两个接口要区分使用;
  • 回调返回值默认无效;如需用返回值替代 DelFile 方法的返回值并跳过默认的本地文件删除(适合云存储插件在回调内自行完成远端与本地清理,可参考 upyun 等插件的实现),须配合 PLUGIN_EXITSIGNAL_RETURN 信号(在回调内每次置位);
  • 默认删除使用 @unlink,文件不存在或权限不足时静默失败,对外部一致性有要求的插件应在回调内自行校验删除结果;
  • 删除用户时会逐个清理其名下附件,本接口会随每个附件各触发一次。