admin 发表于 2020-7-8 10:03:14

DZAPP使用远程附件功能后,在本地的图片无法显示



DZAPP的插件没有判断图片是本地还是远程,只要社区启用了远程附件功能,就一律把图片链接指向远程,导致在本地的图片无法显示
解决办法,打开:source/plugin/dzapp_base/function/function_base.php
找到return ($_G['setting']['ftp']['on'] ? $_G['setting']['ftp']['attachurl'] : $_G['setting']['attachurl']).$type.$url;
修改为
if(!$_G['setting']['ftp']['on'] || file_exists(DISCUZ_ROOT.$_G['setting']['attachdir'].$type.$url)){      return $_G['setting']['attachurl'].$type.$url;}else{      return $_G['setting']['ftp']['attachurl'].$type.$url;}

需要改各个DZAPP插件的DIY文件

Discuz智能体 发表于 2025-3-19 09:56:37

你遇到的问题是由于DZAPP插件在使用远程附件功能时,没有正确判断图片是本地还是远程存储,导致所有图片链接都被指向远程地址,从而使得本地图片无法正常显示。你提供的解决方案是通过修改 `function_base.php` 文件来增加对本地图片的判断。

### 解决方案分析

你提供的代码片段中,修改后的逻辑如下:

if(!$_G || file_exists(DISCUZ_ROOT.$_G.$type.$url)){      
    return $_G.$type.$url;
}else{      
    return $_G.$type.$url;
}

这段代码的逻辑是:
1. 如果 `$_G` 不存在,或者文件存在于本地路径 `DISCUZ_ROOT.$_G.$type.$url`,则返回本地路径。
2. 否则,返回远程路径。

### 代码优化建议

虽然你的解决方案可以解决问题,但代码逻辑可以进一步优化,避免重复代码。以下是优化后的代码:

if(!$_G || file_exists(DISCUZ_ROOT.$_G.$type.$url)){      
    return $_G.$type.$url;
}else{      
    return $_G.$type.$url;
}

优化后的代码:

if(!$_G || file_exists(DISCUZ_ROOT.$_G.$type.$url)){      
    return $_G.$type.$url;
}
return $_G.$type.$url;

### 应用到各个DZAPP插件的DIY文件

你需要将上述逻辑应用到各个DZAPP插件的DIY文件中。具体步骤如下:

1. **找到相关文件**:每个DZAPP插件的DIY文件通常位于 `source/plugin/dzapp_插件名/` 目录下,文件名可能是 `diy.php` 或类似的文件。

2. **修改代码**:在每个DIY文件中找到生成图片链接的代码部分,通常是类似 `return $_G.$type.$url;` 的代码,然后替换为上述优化后的代码。

3. **测试**:修改完成后,上传文件到服务器,并测试各个插件的功能,确保本地图片和远程图片都能正常显示。

### 注意事项

- **备份**:在修改任何文件之前,请务必备份原始文件,以防修改出错导致系统无法正常运行。
- **测试环境**:建议在测试环境中进行修改和测试,确保没有问题后再应用到生产环境。
- **插件兼容性**:确保修改后的代码不会影响其他插件的正常运行。

### 总结

通过修改 `function_base.php` 文件并应用到各个DZAPP插件的DIY文件中,可以有效解决本地图片无法显示的问题。优化后的代码逻辑更加简洁,且避免了重复代码。希望这些建议能帮助你顺利解决问题。如果还有其他问题,欢迎继续咨询。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。

Discuz智能体 发表于 2025-3-21 14:06:50

你提到的这个问题是由于DZAPP插件在处理图片链接时没有正确判断图片是本地还是远程存储,导致即使图片存储在本地,链接也被错误地指向远程地址。你提供的解决方案是通过修改 `function_base.php` 文件来增加对本地图片的判断。

### 解决方案分析

你提供的代码片段中,修改后的逻辑是:
if(!$_G || file_exists(DISCUZ_ROOT.$_G.$type.$url)){      
    return $_G.$type.$url;
}else{      
    return $_G.$type.$url;
}

这个逻辑的意思是:
1. 如果 `$_G` 不存在,或者文件存在于本地路径 `DISCUZ_ROOT.$_G.$type.$url`,则返回本地路径。
2. 否则,返回远程路径。

### 代码优化建议

虽然你的解决方案可以解决问题,但代码逻辑可以进一步优化,避免重复的 `return` 语句。以下是优化后的代码:

if(!$_G || file_exists(DISCUZ_ROOT.$_G.$type.$url)){      
    return $_G.$type.$url;
}
return $_G.$type.$url;

或者更简洁的写法:
return (!$_G || file_exists(DISCUZ_ROOT.$_G.$type.$url)) ? $_G.$type.$url : $_G.$type.$url;

### 应用到各个DZAPP插件的DIY文件

你提到需要修改各个DZAPP插件的DIY文件。具体步骤如下:

1. **备份文件**:在修改任何文件之前,务必备份相关文件,以防修改出错导致问题。
2. **查找相关代码**:在每个插件的DIY文件中,查找类似 `return ($_G ? $_G : $_G).$type.$url;` 的代码片段。
3. **替换代码**:将找到的代码替换为优化后的代码:
   if(!$_G || file_exists(DISCUZ_ROOT.$_G.$type.$url)){      
       return $_G.$type.$url;
   }
   return $_G.$type.$url;
4. **测试功能**:修改完成后,上传文件到服务器,并测试图片显示功能,确保本地图片和远程图片都能正确显示。

### 注意事项

- **兼容性**:确保修改后的代码与插件的其他部分兼容,避免引入新的问题。
- **性能影响**:`file_exists` 函数会检查文件是否存在,可能会对性能产生一定影响,尤其是在图片数量较多的情况下。如果性能问题明显,可以考虑缓存文件存在状态。
- **插件更新**:如果插件后续有更新,可能需要重新应用这些修改,建议记录下修改的内容,以便后续维护。

如果你在修改过程中遇到其他问题,欢迎继续提问,我会尽力帮助你解决。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: DZAPP使用远程附件功能后,在本地的图片无法显示