核心原理
织梦的远程资源本地化功能,其工作流程如下:

(图片来源网络,侵删)
- 内容解析:当你在后台发布文章、产品或其他内容时,织梦会解析内容中的 HTML 代码。
- URL 捕获:系统会扫描内容中的
<img>、<link>、<script>、<iframe>、<video>、<audio>等标签,提取出src或href属性指向的远程文件 URL。 - 文件下载:织梦会使用 PHP 的
cURL或file_get_contents函数,向这些远程 URL 发起请求,将文件内容下载到服务器上。 - 本地存储:下载的文件会被保存到你指定的本地目录(通常是
/uploads/下的某个子文件夹)。 - URL 替换:织梦会用刚刚生成的本地文件 URL,替换掉内容中原来的远程 URL。
这样一来,文章里的所有外部资源就都变成了你服务器上的内部资源,既加快了网站访问速度,也避免了因源站失效或跨域问题导致的图片/资源无法显示。
后台全局设置(最常用、最推荐)
这是最简单、最常规的方法,适用于所有常规的内容发布。
开启自动下载开关
这是功能总开关,必须确保开启。
- 路径:登录织梦后台 -> 系统 -> 系统基本参数 -> 核心设置
- 找到选项:
是否采集远程图片 - 设置:将其值修改为 “是”。
- 点击:页面底部的“保存更改”按钮。
设置本地保存目录
你需要指定一个文件夹来存放这些下载下来的资源。

(图片来源网络,侵删)
- 路径:登录织梦后台 -> 系统 -> 系统基本参数 -> 附件设置
- 找到选项:
远程站点附件保存目录 - 设置:这里默认是
uploads/allimg/,你可以保持默认,也可以自定义,uploads/remote/。- 注意:这个目录必须是相对于网站根目录的,并且确保该目录存在且具有可写权限(
755或777,视服务器安全策略而定)。
- 注意:这个目录必须是相对于网站根目录的,并且确保该目录存在且具有可写权限(
- 点击:页面底部的“保存更改”按钮。
发布/编辑文章时自动生效
完成以上两步设置后,当你通过织梦后台的 ” 或 ” 功能发布文章时,系统会自动扫描文章内容中的远程图片。
- 在编辑器中,你可以直接粘贴包含远程图片的网页内容。
- 点击“保存”或“发布”按钮后,织梦会自动执行下载和替换操作。
- 你可以在文章的“详细内容”编辑框下方的“远程图片”区域看到下载日志和结果。
手动触发下载(适用于已发布的内容)
如果你之前发布的文章里有很多远程图片,或者通过其他方式(如数据库直接导入)添加了远程图片,你可以使用织梦的“一键更新”功能来批量处理。
- 路径:登录织梦后台 -> 系统 -> 一键更新网站 ->
- 操作步骤:
- 在“选择内容”页面,你可以选择要处理的栏目(全站”)。
- 勾选 “选择远程图片” 这个选项。
- 点击“开始执行”。
- 工作原理:系统会遍历你选择的所有文章,对每一篇文章的内容执行“捕获远程URL -> 下载 -> 替换”的流程。
修改代码实现更强大的功能(高级用户)
默认的远程图片下载功能有时会显得“笨拙”,比如无法处理特定域名的图片、无法识别特定格式的资源等,如果你有开发能力,可以通过修改代码来增强功能。
场景示例:让织梦忽略某个特定域名
假设你不想让织梦下载 example.com 域名下的图片。

(图片来源网络,侵删)
-
找到核心文件: 这个功能的核心逻辑在
/include/helpers/assist.helper.php文件中的GetRemoteImage()函数。 -
修改代码: 打开
assist.helper.php文件,找到GetRemoteImage函数,在函数内部,通常在下载逻辑之前,会有一个$mm变量来判断是否允许下载。你可以添加一个
if条件来判断 URL,如果域名是你想忽略的,就直接返回原 URL,不进行下载。代码示例:
// 在 GetRemoteImage 函数中,找到类似下面这行代码的位置 if($m == 1) { // 在这里添加你的判断逻辑 if (strpos($remoteUrl, 'example.com') !== false) { // 如果是 example.com 的图片,则不做处理,直接返回原URL return $remoteUrl; } // ... 原有的下载代码 ... $fileurl = $cfg_uploaddir.'/'.MyDate($cfg_addondate, $t).'/'.$filename; // ... 后续代码 ... }注意:直接修改核心文件在织梦升级后可能会被覆盖,请做好备份或使用代码版本控制。
常见问题与解决方案
Q: 远程图片下载失败,提示“无法获取远程图片内容”或“allow_url_fopen is off”?
- 原因:这通常是因为 PHP 的
allow_url_fopen功能被禁用了,织梦默认使用这个函数来获取远程内容。 - 解决方案:
- 首选方案:联系你的服务器空间商,开启
allow_url_fopen。 - 备选方案:如果空间商无法开启,可以修改织梦,让它使用
cURL来代替,打开/include/helpers/extend.helper.php文件,找到ddGetHttpContent函数,确保if (function_exists('curl_init'))这个分支的代码是有效的,并且织梦的其他相关函数(如GetHttpContent)会优先调用它。
- 首选方案:联系你的服务器空间商,开启
Q: 下载的图片路径不正确,或者图片打不开?
- 原因:
- 附件保存目录的路径设置错误。
- 保存目录没有写入权限。
- 服务器开启了安全模式,或者目录权限设置过于严格(如
644)。
- 解决方案:
- 检查 系统基本参数 -> 附件设置 中的
远程站点附件保存目录是否正确。 - 使用 FTP 或文件管理器登录服务器,检查该目录是否存在,并尝试将权限修改为
755。 - 检查
uploads目录及其子目录的权限。
- 检查 系统基本参数 -> 附件设置 中的
Q: 为什么有些图片(如 base64 编码的)没有被下载?
- 原因:织梦的默认规则是解析
<img src="http://...">这种标准 URL,对于src="data:image/png;base64,..."这种内联的 base64 图片,默认规则不会处理。 - 解决方案:这需要通过 方法三(修改代码) 来实现,你需要修改
GetRemoteImage函数,增加对data:image格式的识别和下载逻辑,这涉及到更复杂的字符串处理和文件保存操作。
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 后台设置 | 发布新文章、编辑已有文章 | 简单、方便、无需代码 | 功能固定,无法自定义规则 |
| 一键更新 | 批量处理已发布的旧文章 | 高效、批量 | 可能会对服务器造成较大压力 |
| 修改代码 | 需要自定义下载规则(如忽略特定域名、处理base64) | 功能强大、灵活 | 需要开发能力,升级后可能失效 |
对于绝大多数用户来说,方法一 已经足够满足日常需求,遇到问题时,首先检查后台设置和服务器权限,这能解决 90% 的问题,如果需要更复杂的功能,再考虑 方法三。
