本地化失效的现象
织梦采集规则中“是否下载图片到本地”开启后,正常情况下采集的文章外链图片会被下载到 uploads/allimg/ 并替换为本地 URL。失效时表现为:文章发布成功但图片仍是外链、图片显示为破损图标、采集日志报下载失败、本地目录没有新增文件。外链图片长期依赖第三方服务器,一旦对方删除或防盗链,文章图片即丢失,必须尽快修复本地化。
失效原因分类
| 分类 | 典型原因 |
|---|---|
| 网络层 | 服务器出口被墙、DNS 解析失败、超时 |
| 权限层 | uploads 目录无写权限 |
| 配置层 | 采集规则未勾选下载图片 |
| 防盗链 | 目标站 Referer 校验,返回 403 |
| SSL层 | cURL 证书校验失败 |
| 程序层 | PHP 扩展缺失、allow_url_fopen 关闭 |
逐项排查步骤
1. 确认采集规则配置
后台 采集 → 采集节点管理 → 编辑节点,确认“图片是否下载到本地”勾选为“是”,并填写正确的保存目录。
2. 检查目录权限
ls -ld /www/wwwroot/dedecms/uploads/allimg
# 期望属主为 Web 用户,权限 755
chown -R www:www /www/wwwroot/dedecms/uploads/allimg
chmod -R 755 /www/wwwroot/dedecms/uploads/allimg
3. 检查 PHP 配置
# php.ini 确认
allow_url_fopen=On
; cURL 扩展必须启用
extension=curl
extension=openssl
; 超时建议放大
max_execution_time=120
default_socket_timeout=60
4. 手动测试下载
在服务器上 curl 测试目标图片,验证网络与防盗链:
curl -I -A "Mozilla/5.0" -e "https://target.com/" \
https://target.com/image.jpg
# 期望 200,若 403 多为防盗链
# 若超时检查 DNS 与出口
常见故障与修复
故障一:防盗链 403
目标站校验 Referer,需在采集下载时伪造 Referer。修改 include/dedecollection.class.php 的 cURL 请求:
curl_setopt($ch, CURLOPT_REFERER, $sourceUrl);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 ...');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Accept: image/webp,*/*',
'Accept-Language: zh-CN,zh;q=0.9',
]);
故障二:SSL 证书校验失败
// 开发环境可临时关闭校验,生产建议更新 CA 证书
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// 正规做法:更新 ca-bundle
yum update ca-certificates
故障三:超时下载大图失败
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
// 大于 5MB 的图先存临时文件再 move
$tmpFile=tempnam('/tmp', 'img');
curl_setopt($ch, CURLOPT_FILE, fopen($tmpFile, 'w'));
故障四:本地化开关未生效
部分老版本采集类存在 bug,即使勾选也不下载。需打补丁,在 collection.inc.php 的 DownImage 方法加入:
if ($this->notdownpic=='N') {
$this->DownImage($picurl);
}
验证本地化生效
- 采集一篇文章后查看源码,
<img src>是否为本站 URL。 - 检查 uploads/allimg 当天目录是否有新文件。
- 数据库 body 字段 grep 外链域名,应为 0。
- 统计 7 天内外链图片占比,应趋近 0。
建议在采集完成后跑一个脚本,扫描所有文章 body,把仍存在外链图片的文章列出待处理,避免长期累积。
注意事项
- 下载他人图片注意版权,建议加水印并标注来源。
- 大图下载会拖慢采集,建议限制单图 ≤ 5MB。
- 下载失败时保留外链,避免文章无图。
- 批量本地化历史文章时控制并发,避免被目标站封 IP。
- 定期清理被本地化但实际未引用的孤儿图片。
建议与后续
把图片本地化做成采集后的独立校验任务:采集完成 → 扫描外链 → 自动补下载 → 生成报告。把成功率、平均耗时、失败图片列表纳入采集看板,失败立即处理。同时考虑接入 OCR 与 AI 自动配图,对外链失效的图片做内容兜底,让织梦采集内容在版权与稳定性之间取得平衡,长期保持文章质量。