修改 php.ini 文件(最推荐、最彻底)
这是最根本、最有效的解决方法,通过修改PHP的全局配置,限制 allow_url_fopen 和 allow_url_include 的功能。

(图片来源网络,侵删)
适用场景:你有服务器的 php.ini 文件管理权限。
操作步骤:
-
找到
php.ini文件:- 如果你使用的是虚拟主机,通常在虚拟主机控制面板的“PHP设置”或“高级设置”里可以找到和编辑。
- 如果你使用的是云服务器或VPS,文件路径通常是
/etc/php/版本号/cli/php.ini或/etc/php/版本号/fpm/php.ini(/etc/php/7.4/fpm/php.ini),你可以通过在网站根目录创建一个phpinfo.php文件,内容为<?php phpinfo(); ?>,然后访问它来查找Loaded Configuration File这一行,确认php.ini的准确路径。
-
修改配置项:
(图片来源网络,侵删)- 找到
allow_url_fopen这一行,将其值设置为Off。allow_url_fopen = Off
- (可选但推荐)找到
allow_url_include这一行,也将其值设置为Off,这个设置主要防止远程文件包含,对图片下载影响不大,但能增强安全性。allow_url_include = Off
- 重要提示:这两个选项是全局性的,修改后会影响服务器上所有使用该
php.ini的PHP网站,请确保你的其他网站依赖这些功能。
- 找到
-
重启PHP服务:
- 修改保存后,必须重启PHP服务才能生效。
- 对于虚拟主机:通常在控制面板里重启一下PHP即可。
- 对于云服务器/VPS:
- 如果是 Nginx + PHP-FPM,执行
sudo systemctl restart php7.4-fpm(版本号可能不同)。 - 如果是 Apache,执行
sudo systemctl restart apache2。
- 如果是 Nginx + PHP-FPM,执行
优点:
- 效果彻底,一劳永逸。
- 从根源上解决问题,任何PHP脚本都无法通过
file_get_contents()等函数获取远程内容。
缺点:
- 需要服务器权限。
- 全局生效,可能会影响其他网站。
修改织梦核心文件(针对性强、无需服务器权限)
如果你没有 php.ini 的修改权限,但可以修改织梦的文件,这是最直接的方法,织梦在获取远程图片时,会调用 include/dedehtml2.class.php 文件中的 GetHtml 方法。

(图片来源网络,侵删)
适用场景:你无法修改 php.ini,但可以修改网站文件。
操作步骤:
-
找到并打开文件:
- 使用FTP或文件管理器,打开织梦根目录下的
include/dedehtml2.class.php文件。
- 使用FTP或文件管理器,打开织梦根目录下的
-
定位并修改代码:
-
在文件中搜索
file_get_contents或@file_get_contents,你会找到类似这样的代码:// 在函数 GetHtml() 或类似函数中 $this->SaveTo = $this->GetHtml($this->GetUrl($this->TempUrl), $this->getCookie()); // ... // GetHtml 函数内部 $body = @file_get_contents($strUrl);
-
找到执行
file_get_contents($strUrl)的那一行(通常前面有 符号抑制错误)。 -
注释掉或修改这行代码,你可以选择直接让它返回一个空值,这样织梦会认为下载失败。
// 原代码 // $body = @file_get_contents($strUrl); // 修改方案1:直接返回空,让织梦以为下载失败 $body = ''; // 修改方案2:如果需要保留本地图片功能,可以加一个判断 // if (strpos($strUrl, 'http') === false) { // $body = @file_get_contents($strUrl); // } else { // $body = ''; // } -
保存文件。
-
优点:
- 只影响织梦程序,不影响其他网站。
- 不需要服务器高级权限。
缺点:
- 修改了核心文件,织梦升级后可能会被覆盖,需要重新修改。
- 如果织梦有其他地方也调用了这个函数来获取远程内容,可能会被一并禁止。
使用 .htaccess 文件(适用于Apache服务器)
如果你的服务器是Apache环境,并且开启了 mod_rewrite 模块,可以通过 .htaccess 文件来阻止对远程图片的请求。
适用场景:服务器是Apache,且网站根目录下有 .htaccess 文件。
操作步骤:
-
找到或创建
.htaccess文件:- 在织梦网站的根目录下找到
.htaccess文件,如果没有就创建一个。
- 在织梦网站的根目录下找到
-
添加规则:
- 在文件中添加以下规则,这个规则会阻止任何包含外部域名(
http://或https://)的图片请求。# 阻止访问包含外部域名的图片 RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?你的域名.com [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?你的域名.com/ [NC] RewriteCond %{THE_REQUEST} \.(jpg|jpeg|png|gif|bmp|webp) [NC] RewriteRule \.(jpg|jpeg|png|gif|bmp|webp) - [F,NC,L] - 请务必将
你的域名.com替换成你自己的域名,并且可以加上你的www子域名。
- 在文件中添加以下规则,这个规则会阻止任何包含外部域名(
-
保存文件。
注意:这个方法主要是防止外部网站盗用你的图片(防盗链),而不是阻止织梦自身去下载远程图片,所以它不完全符合你的需求,但可以作为一种辅助的安全措施。
总结与建议
| 方法 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
修改 php.ini |
效果最彻底、最安全,一劳永逸 | 需要服务器权限,全局生效 | ★★★★★ |
| 修改织梦文件 | 针对性强,不影响其他网站,无需服务器高级权限 | 修改核心文件,升级后可能失效 | ★★★★☆ |
使用 .htaccess |
简单,无需服务器权限,可防盗链 | 无法阻止织梦自身下载远程图片,只防盗链 | ★☆☆☆☆ (不符合需求,但可作补充) |
最终建议:
- 首选方法一:如果你有服务器权限,强烈建议使用修改
php.ini的方法,这是最规范、最安全的做法。 - 次选方法二:如果你是普通虚拟主机用户,没有
php.ini权限,那么修改include/dedehtml2.class.php文件是最直接有效的办法,记得在织梦升级后检查一下文件是否被覆盖。 - 补充方法三:无论采用哪种方法,你都可以加上
.htaccess防盗链规则,增加网站的安全性。
在操作前,务必备份你的文件,以防万一出现问题可以快速恢复。
