为何织梦禁止远程图片下载?

99ANYc3cd6
预计阅读时长 12 分钟
位置: 首页 织梦建站 正文

修改 php.ini 文件(最推荐、最彻底)

这是最根本、最有效的解决方法,通过修改PHP的全局配置,限制 allow_url_fopenallow_url_include 的功能。

织梦禁止远程图片下载
(图片来源网络,侵删)

适用场景:你有服务器的 php.ini 文件管理权限。

操作步骤:

  1. 找到 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 的准确路径。
  2. 修改配置项

    织梦禁止远程图片下载
    (图片来源网络,侵删)
    • 找到 allow_url_fopen 这一行,将其值设置为 Off
      allow_url_fopen = Off
    • (可选但推荐)找到 allow_url_include 这一行,也将其值设置为 Off,这个设置主要防止远程文件包含,对图片下载影响不大,但能增强安全性。
      allow_url_include = Off
    • 重要提示:这两个选项是全局性的,修改后会影响服务器上所有使用该 php.ini 的PHP网站,请确保你的其他网站依赖这些功能。
  3. 重启PHP服务

    • 修改保存后,必须重启PHP服务才能生效。
    • 对于虚拟主机:通常在控制面板里重启一下PHP即可。
    • 对于云服务器/VPS
      • 如果是 Nginx + PHP-FPM,执行 sudo systemctl restart php7.4-fpm (版本号可能不同)。
      • 如果是 Apache,执行 sudo systemctl restart apache2

优点

  • 效果彻底,一劳永逸。
  • 从根源上解决问题,任何PHP脚本都无法通过 file_get_contents() 等函数获取远程内容。

缺点

  • 需要服务器权限。
  • 全局生效,可能会影响其他网站。

修改织梦核心文件(针对性强、无需服务器权限)

如果你没有 php.ini 的修改权限,但可以修改织梦的文件,这是最直接的方法,织梦在获取远程图片时,会调用 include/dedehtml2.class.php 文件中的 GetHtml 方法。

织梦禁止远程图片下载
(图片来源网络,侵删)

适用场景:你无法修改 php.ini,但可以修改网站文件。

操作步骤:

  1. 找到并打开文件

    • 使用FTP或文件管理器,打开织梦根目录下的 include/dedehtml2.class.php 文件。
  2. 定位并修改代码

    • 在文件中搜索 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 文件。

操作步骤:

  1. 找到或创建 .htaccess 文件

    • 在织梦网站的根目录下找到 .htaccess 文件,如果没有就创建一个。
  2. 添加规则

    • 在文件中添加以下规则,这个规则会阻止任何包含外部域名(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 子域名。
  3. 保存文件

注意:这个方法主要是防止外部网站盗用你的图片(防盗链),而不是阻止织梦自身去下载远程图片,所以它不完全符合你的需求,但可以作为一种辅助的安全措施。


总结与建议

方法 优点 缺点 推荐度
修改 php.ini 效果最彻底、最安全,一劳永逸 需要服务器权限,全局生效 ★★★★★
修改织梦文件 针对性强,不影响其他网站,无需服务器高级权限 修改核心文件,升级后可能失效 ★★★★☆
使用 .htaccess 简单,无需服务器权限,可防盗链 无法阻止织梦自身下载远程图片,只防盗链 ★☆☆☆☆ (不符合需求,但可作补充)

最终建议:

  1. 首选方法一:如果你有服务器权限,强烈建议使用修改 php.ini 的方法,这是最规范、最安全的做法。
  2. 次选方法二:如果你是普通虚拟主机用户,没有 php.ini 权限,那么修改 include/dedehtml2.class.php 文件是最直接有效的办法,记得在织梦升级后检查一下文件是否被覆盖。
  3. 补充方法三:无论采用哪种方法,你都可以加上 .htaccess 防盗链规则,增加网站的安全性。

在操作前,务必备份你的文件,以防万一出现问题可以快速恢复。

-- 展开阅读全文 --
头像
c语言实用程序设计100例
« 上一篇 03-05
零基础学C语言,小甲鱼课该怎么入门?
下一篇 » 03-05

相关文章

取消
微信二维码
支付宝二维码

目录[+]