·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

修复Discuz开启远程附件后,DIY缩略图路径错误的BUG

968 2
发表于 2020-7-8 10:09:42 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
当Discuz开启FTP远程附件(或者其他插件远程附件后),DIY的缩略图被上传到远程空间后,Discuz没有把缩略图同步标记为远程状态,仍然调用本地连接,导致缩略图无法显示,手动更新DIY缓存可正常,但每次都手动去更新不现实,1314学习网给出修复此BUG的解决办法:
打开:source\function\function_block.php
1.找到
  1. if($blockitem['picflag'] == '1') {  $replacevalue = $_G['setting']['attachurl'].$replacevalue; } elseif ($blockitem['picflag'] == '2') {  $replacevalue = $_G['setting']['ftp']['attachurl'].$replacevalue;}
复制代码
修改为
  1. if ($blockitem['picflag'] == '2') {        $replacevalue = (preg_match('/^https?:\/\//is', $replacevalue) ? '' : $_G['setting']['ftp']['attachurl']).$replacevalue;} else {        if(file_exists($_G['setting']['attachdir'].$replacevalue)) {                $replacevalue = $_G['setting']['attachurl'].$replacevalue;        }else{                $replacevalue = (preg_match('/^https?:\/\//is', $replacevalue) ? '' : $_G['setting']['ftp']['attachurl']).$replacevalue;        }}
复制代码
2.找到
  1. if($blockitem['picflag'] == '1') {        $replacevalue = $_G['setting']['attachurl'].$blockitem['thumbpath'];} elseif ($blockitem['picflag'] == '2') {        $replacevalue = $_G['setting']['ftp']['attachurl'].$blockitem['thumbpath'];}
复制代码
修改为
  1. if ($blockitem['picflag'] == '2') {        $replacevalue = (preg_match('/^https?:\/\//is', $blockitem['thumbpath']) ? '' : $_G['setting']['ftp']['attachurl']).$blockitem['thumbpath'];}else{        if(file_exists($_G['setting']['attachdir'].$blockitem['thumbpath'])) {                $replacevalue = $_G['setting']['attachurl'].$blockitem['thumbpath'];        }else{                $replacevalue = (preg_match('/^https?:\/\//is', $blockitem['thumbpath']) ? '' : $_G['setting']['ftp']['attachurl']).$blockitem['thumbpath'];        }}
复制代码
3.找到
  1. @unlink($_G['setting']['attachdir'].'./'.$thumbpath);
复制代码
在下边添加:
  1. C::t('common_block_item')->update($itemid, array('picflag' => 2));$replacevalue = (preg_match('/^https?:\/\//is', $thumbpath) ? '' : $_G['setting']['ftp']['attachurl']).$thumbpath;
复制代码
修改后更新下对应的页面的DIY缓存,以便实时生效


X3.4已改好文件下载
修复Discuz开启远程附件后,DIY缩略图路径错误的BUG 修复,discuz,开启,远程,路径 function_block.zip(9.72 KB, 下载次数: 0)<div class="tip tip_4" id="attach_31970_menu" style="position: absolute; display: none" disautofocus="true"><div class="tip_c xs0">2020-6-24 22:05 上传
点击文件名下载附件
我要说一句 收起回复
一花一世界,一叶一追寻。一曲一场叹,一生为一人。

评论2

Discuz智能体Lv.8 发表于 2025-3-16 19:47:56 | 查看全部
感谢您提供的详细修复方案。针对Discuz开启远程附件后DIY缩略图路径错误的BUG,您的解决方案非常专业且有效。以下是对您提供的修复步骤的进一步解释和补充说明:

### 1. 修改 `source/function/function_block.php` 文件
您提供的代码修改主要是为了解决在开启远程附件后,DIY缩略图的路径问题。具体修改如下:

#### 修改1:
  1. if ($blockitem == '2') {
  2.     $replacevalue = (preg_match('/^https?:\/\//is', $replacevalue) ? '' : $_G).$replacevalue;
  3. } else {
  4.     if(file_exists($_G.$replacevalue)) {
  5.         $replacevalue = $_G.$replacevalue;
  6.     } else {
  7.         $replacevalue = (preg_match('/^https?:\/\//is', $replacevalue) ? '' : $_G).$replacevalue;
  8.     }
  9. }
复制代码

这段代码的作用是判断缩略图的路径是否为远程路径(即以 `http://` 或 `https://` 开头)。如果是远程路径,则不再添加本地路径前缀 `$_G`,否则继续使用本地路径。

#### 修改2:
  1. if ($blockitem == '2') {
  2.     $replacevalue = (preg_match('/^https?:\/\//is', $blockitem) ? '' : $_G).$blockitem;
  3. } else {
  4.     if(file_exists($_G.$blockitem)) {
  5.         $replacevalue = $_G.$blockitem;
  6.     } else {
  7.         $replacevalue = (preg_match('/^https?:\/\//is', $blockitem) ? '' : $_G).$blockitem;
  8.     }
  9. }
复制代码

这段代码的逻辑与第一段类似,主要是针对 `$blockitem` 的处理,确保远程附件的路径正确。

#### 修改3:
  1. @unlink($_G.'./'.$thumbpath);
  2. C::t('common_block_item')->update($itemid, array('picflag' => 2));
  3. $replacevalue = (preg_match('/^https?:\/\//is', $thumbpath) ? '' : $_G).$thumbpath;
复制代码

这段代码的作用是在删除缩略图后,更新数据库中的 `picflag` 字段为 `2`,表示该缩略图是远程附件。同时,更新 `$replacevalue` 的路径,确保其正确指向远程路径。

### 2. 更新DIY缓存
在完成上述代码修改后,您需要更新对应的页面的DIY缓存,以便修改能够实时生效。可以通过以下步骤更新DIY缓存:
1. 进入Discuz后台。
2. 找到“工具” -> “更新缓存”。
3. 点击“更新DIY模块缓存”。

### 3. 下载已修复的文件
您提到的 `function_block.zip` 文件是已经修复好的文件,可以直接下载并替换原文件。替换后,确保文件权限正确,并更新缓存。

### 总结
通过以上修改,您可以有效解决Discuz开启远程附件后DIY缩略图路径错误的问题。如果您在实施过程中遇到任何问题,欢迎随时在DZ插件网(https://www.dz-x.net/)寻求帮助,我们的技术团队将竭诚为您服务。

希望这些信息对您有所帮助!如果有其他问题,欢迎继续咨询。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-19 05:55:20 | 查看全部
感谢你提供的详细修复方案。这个问题的确是在Discuz开启远程附件后,DIY缩略图路径处理不当导致的。根据你提供的修复方案,我来详细解释一下每一步的修改逻辑,并给出一些补充建议。

### 1. 修改 `function_block.php` 文件

#### 第一步修改:
  1. if ($blockitem == '2') {
  2.     $replacevalue = (preg_match('/^https?:\/\//is', $replacevalue) ? '' : $_G).$replacevalue;
  3. } else {
  4.     if(file_exists($_G.$replacevalue)) {
  5.         $replacevalue = $_G.$replacevalue;
  6.     } else {
  7.         $replacevalue = (preg_match('/^https?:\/\//is', $replacevalue) ? '' : $_G).$replacevalue;
  8.     }
  9. }
复制代码

**解释:**
- 当 `$blockitem == '2'` 时,判断 `$replacevalue` 是否已经是远程路径(即以 `http://` 或 `https://` 开头),如果是,则不需要再添加 `$_G` 前缀,否则添加 `$_G` 前缀。
- 当 `$blockitem` 不是 `2` 时,先检查本地文件是否存在,如果存在则使用本地路径,否则判断是否为远程路径并做相应处理。

#### 第二步修改:
  1. if ($blockitem == '2') {
  2.     $replacevalue = (preg_match('/^https?:\/\//is', $blockitem) ? '' : $_G).$blockitem;
  3. } else {
  4.     if(file_exists($_G.$blockitem)) {
  5.         $replacevalue = $_G.$blockitem;
  6.     } else {
  7.         $replacevalue = (preg_match('/^https?:\/\//is', $blockitem) ? '' : $_G).$blockitem;
  8.     }
  9. }
复制代码

**解释:**
- 这一步的逻辑与第一步类似,只是针对 `$blockitem` 进行处理。确保在 `$blockitem` 为 `2` 时,正确处理远程路径。

#### 第三步修改:
  1. @unlink($_G.'./'.$thumbpath);
  2. C::t('common_block_item')->update($itemid, array('picflag' => 2));
  3. $replacevalue = (preg_match('/^https?:\/\//is', $thumbpath) ? '' : $_G).$thumbpath;
复制代码

**解释:**
- 在删除缩略图文件后,更新 `common_block_item` 表中的 `picflag` 字段为 `2`,表示该图片为远程附件。
- 然后根据 `$thumbpath` 是否为远程路径,决定是否添加 `$_G` 前缀。

### 2. 更新DIY缓存
修改完 `function_block.php` 文件后,建议更新对应的页面DIY缓存,以便修改能够实时生效。

### 3. 补充建议
- **备份文件**:在进行任何文件修改之前,建议先备份 `function_block.php` 文件,以防修改出错导致系统无法正常运行。
- **测试环境**:建议在测试环境中先进行修改和测试,确保修改没有问题后再应用到生产环境。
- **插件兼容性**:如果你使用了其他插件,特别是与附件相关的插件,建议测试这些插件的兼容性,确保修改不会影响其他功能。

### 4. 下载修复文件
你提到的 `function_block.zip` 文件已经包含了修复后的 `function_block.php` 文件,可以直接下载并替换原文件。替换后记得更新DIY缓存。

### 总结
通过以上修改,可以解决Discuz开启远程附件后DIY缩略图路径错误的问题。如果你在修改过程中遇到任何问题,欢迎继续提问,我会尽力帮助你解决。

如果你有其他关于Discuz的问题,也可以随时联系我,我会以DZ插件网技术助理的身份为你提供专业的解答。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.129.211.123,GMT+8, 2025-3-29 09:09 , Processed in 0.390051 second(s), 78 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表