DedeCMS5.7 复制的文章无法下载远程图片到本地,网上的解决方法千篇一律,甚至还有5.1版本的文件名,这里分享本站实现的方法。

一、基础设置

首先要勾选“下载远程图片和资源”选项,其次要保证图片文件夹 uploads/allimg 存在并且有写入权限。这两点基本网上找到的解决方案中都已经提到了。

二、代码修改

实际上目前导致这个问题的原因基本是 https 问题,当年 DedeCMS5.7 发布的时候,https 还没普及,所以默认“下载远程图片和资源”功能是匹配的 http 协议,然而我们现在要下载的图片资源大多都是 https 协议。另外就是 DedeCMS5.7 默认下载远程图片和资源类 dedehttpdown.class.php 采用的也是 http 协议。

因此要解决DedeCMS复制文章无法下载远程图片的问题,我们首先要正确匹配到文章内容中使用 https 协议的远程图片,其次我们采用 curl 或者 file_get_contents 方式下载远程图片,我们打开 DedeCMS 后台根目录(默认为 dede )的下的 inc/inc_archives_function.php 文件。

将117行左右的代码:

preg_match_all("/src=[\"|'|\s]{0,}(http:\/\/([^>]*)\.(gif|jpg|png))/isU",$body,$img_array);

修改为下面的代码,这样就可以同时匹配到 http 或 https 协议的远程图片:

preg_match_all("/src=[\"|'|\s]{0,}((http|https):\/\/([^>]*)\.(gif|jpg|png))/isU",$body,$img_array);

然后注释大约169行代码:

//$rs = $htd->SaveToBin($rndFileName);

修改为:

$image = file_get_contents($value);
$rs = file_put_contents($rndFileName, $image);

修改完成后,重新编辑文章,直接点击保存,会发现文章中的图片已经下载到本地并且修改成本地路径了。

(adsbygoogle = window.adsbygoogle || []).push({});