如何实现DedeCMS中远程图片的本地化下载?

avatar
作者
筋斗云
阅读量:0
要解决dede(织梦)不能下载远程图片实现图片本地化的问题,可以尝试以下方法:,,1. 检查服务器是否支持远程下载功能。在dede后台,依次点击“系统”>“系统基本参数”,找到“附件设置”选项,确保“允许远程下载”选项已勾选。,,2. 检查文件权限。确保data目录及其子目录具有写入权限。可以通过FTP工具查看和修改文件权限。,,3. 清理缓存。在dede后台,依次点击“系统”>“系统错误修复”,选择“清除所有缓存”,然后点击“开始执行”。,,4. 如果以上方法都无法解决问题,可以考虑手动下载远程图片并上传到本地服务器,然后将图片地址替换为本地地址。

在织梦(Dede)CMS系统中,有时会遇到无法下载远程图片并实现本地化的问题,这通常是由于服务器配置或代码限制导致的,以下是一些常见的解决方案:

开启远程图片本地化功能

1、编辑区域选项

如何实现DedeCMS中远程图片的本地化下载?

在文章编辑区域的上方,有一个“附加选项”,勾选“下载远程图片和资源”即可启用此功能。

也可以在系统设置中的“其他选项”里,找到并勾选“远程图片本地化”选项。

2、检查目录结构

确保上传图片的目录中存在allimg文件夹,如果更改了图片上传目录,这个文件夹可能会缺失,导致问题发生。

修改服务器配置

3、禁用fsockopen()函数

如果服务器上禁用了fsockopen()函数,可以通过修改PHP配置文件php.ini来解决,找到disable_functions项,去掉其中的fsockopen

另一种方法是替换代码中的fsockopen()函数为stream_socket_client(),具体操作如下:

打开/include/dedehttpdown.class.php文件,找到第507行:

```php

$this>m_fp = @fsockopen($this>m_host, $this>m_port, $errno, $errstr, 10);

```

将其替换为:

```php

$this>m_fp = @stream_socket_client($this>m_host . ':' . $this>m_port, $errno, $errstr, 10);

```

保存文件并测试。

4、使用cURL支持HTTPS

对于支持HTTPS的远程图片,可以在dedehttpdown.class.php文件中添加cURL支持:

```php

if ($this>m_scheme == "https") {

$this>m_port = "443";

}

if (function_exists('curl_init') && function_exists('curl_exec')) {

$this>m_ch = curl_init();

curl_setopt($this>m_ch, CURLOPT_URL, $this>m_scheme . '://' . $this>m_host . ':' . $this>m_port . $this>m_path);

curl_setopt($this>m_ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($this>m_ch, CURLOPT_FOLLOWLOCATION, 1);

if ($requestType == "POST") {

curl_setopt($this>m_ch, CURLOPT_POST, 1);

// $content = is_array($post) ? http_build_query($post) : $post;

// curl_setopt($this>m_ch, CURLOPT_POSTFIELDS, urldecode($content));

}

if (!empty($this>m_cookies)) {

curl_setopt($this>m_ch, CURLOPT_COOKIE, $this>m_cookies);

}

if ($this>m_scheme == "https") {

curl_setopt($this>m_ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($this>m_ch, CURLOPT_SSL_VERIFYHOST, false);

}

$this>m_puthead = array();

$this>m_puthead["Host"] = $this>m_host;

if (count($this>m_puthead) > 0) {

foreach ($this>m_puthead as $k => $v) {

$headers[] = "$k: $v";

}

curl_setopt($this>m_ch, CURLOPT_HTTPHEADER, $headers);

}

curl_setopt($this>m_ch, CURLOPT_CONNECTTIMEOUT, 20);

curl_setopt($this>m_ch, CURLOPT_TIMEOUT, 900);

$this>m_html = curl_exec($this>m_ch);

$status = curl_getinfo($this>m_ch);

if (count($status) > 0) {

foreach ($status as $key => $value) {

$key = str_replace("_", "", $key);

if ($key == "httpcode") {

$this>m_httphead["httpstate"] = $value;

}

$this>m_httphead[$key] = $value;

}

}

$this>m_error = curl_errno($this>m_ch);

return TRUE;

}

```

这段代码通过cURL库来处理HTTPS请求,确保能够正确下载并保存远程图片。

常见问题解答(FAQs)

Q1: 为什么开启远程图片本地化后仍然无法下载图片?

A1: 可能的原因是服务器禁用了fsockopen()函数,请按照上述方法修改dedehttpdown.class.php文件,将fsockopen()替换为stream_socket_client(),或者在php.ini中解除对fsockopen()的禁用。

Q2: 如果服务器不支持cURL,还有其他办法解决HTTPS图片无法下载的问题吗?

A2: 如果服务器不支持cURL,可以尝试使用pfsockopen()函数替代fsockopen(),具体步骤如下:

打开pub_httpdown.php文件,找到以下代码:

```php

$this>m_fp = @ fsockopen($this>m_host, $this>m_port, $errno, $errstr, 10);

```

将其替换为:

```php

$this>m_fp = @ pfsockopen($this>m_host, $this>m_port, $errno, $errstr, 10);

```

保存文件并测试,看是否解决问题。

通过以上方法,可以有效解决Dedecms无法下载远程图片并实现本地化的问题,希望这些信息对你有所帮助!


Dede(织梦)不能下载远程图片实现图片本地化的解决方案

问题

在Dede(织梦)内容管理系统(CMS)中,有时会遇到无法下载远程图片的问题,这可能导致网页显示不完整或图片无法正常显示,以下将详细介绍几种实现图片本地化的解决方案。

解决方案

1. 修改PHP配置

原因:Dede可能因为PHP配置中的allow_url_fopen参数被禁用,导致无法访问远程图片。

操作

打开PHP配置文件php.ini

查找并取消注释allow_url_fopen = Off(如果已禁用)。

修改为allow_url_fopen = On

重启Apache服务器以应用更改。

2. 使用curl扩展

原因:如果allow_url_fopen被禁用,可以使用curl扩展来下载远程图片。

操作

确保PHP安装了curl扩展。

在Dede的模板或插件中使用curl函数下载图片,

```php

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://example.com/image.jpg");

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$image = curl_exec($ch);

curl_close($ch);

file_put_contents("path/to/local/image.jpg", $image);

```

3. 使用第三方服务

原因:如果Dede无法直接下载图片,可以考虑使用第三方服务如CDN或图片存储服务。

操作

注册并配置第三方服务。

将远程图片上传到第三方服务,并获取图片的新URL。

在Dede中替换远程图片链接为第三方服务提供的链接。

4. 修改Dede模板

原因:Dede模板中可能使用了不兼容的图片标签或方法。

操作

检查Dede模板中的图片标签,确保它们是正确的。

如果使用<img>标签,确保其src属性指向正确的图片URL。

5. 使用插件或模块

原因:Dede可能没有内置的图片下载功能,可以使用第三方插件或模块来实现。

操作

在Dede的插件市场寻找图片下载插件。

安装并配置插件,按照说明操作。

通过上述方法,可以有效地解决Dede无法下载远程图片的问题,实现图片的本地化,从而确保网页内容的完整性和美观性,在选择解决方案时,应根据具体情况和需求进行选择。

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!