You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PHP删除Cloudinary图片?调用destroy返回ok但图片仍可访问

Cloudinary 删除资源返回 ok 但仍可访问的解决方法

你现有代码的基础调用逻辑没有问题,接口返回 ok 说明接口鉴权、参数格式都符合要求,出现删除后资源仍可访问的情况,通常是以下几个原因导致的:

  • 没有配置 invalidate 生效参数
    destroy 方法默认不会主动触发 CDN 缓存失效,就算源站资源已经被删除,Cloudinary 全球边缘节点的缓存还会保留最长30天,在缓存过期前访问资源还是会正常返回。你需要在调用时显式传入 invalidate 设为 true,主动提交缓存失效请求:
    $cloudinary = new Cloudinary($config);
    return $cloudinary->uploadApi()->destroy($file_id, [
      'invalidate' => true
    ]);
    
    注意缓存失效不是实时生效,通常需要5-10分钟左右全球节点才能完成同步。
  • 资源类型不匹配
    destroy 方法默认只会处理 image 类型的资源,如果你要删除的是视频、普通文件(raw 类型),需要额外指定 resource_type 参数,否则接口找不到对应资源就会返回空成功,不会执行实际删除操作:
    比如删除视频的写法:
    return $cloudinary->uploadApi()->destroy($file_id, [
      'resource_type' => 'video',
      'invalidate' => true
    ]);
    
    删除普通非媒体文件就把参数值换成 raw 即可。
  • 资源 ID 缺少完整路径前缀
    如果你的资源是存放在指定文件夹下的,传入的 $file_id 需要带上完整的路径前缀,比如资源存放在 avatar/ordinary 目录下,不能只传文件名作为 ID,需要传入完整的 avatar/ordinary/xxx 才能匹配到对应资源。
  • 开启了软删除配置
    如果你的 Cloudinary 账号开启了软删除功能,调用 destroy 方法只会把资源移入回收站,不会立刻永久删除,资源的原访问链接还是可以正常打开,需要到后台回收站手动清空,或者调用永久删除接口才会真正清理资源。

内容的提问来源于stack exchange,提问作者Čamo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:39:00