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

启用远程附件 文字.docx 还存在本地??

238 2
发表于 2022-10-17 22:51:48 | 查看全部 阅读模式

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

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

×
启用远程附件  文字.docx 还存在本地??

http://www.xxxxxxxx.com/forum.php?mod=attachment&aid=NHw5ODEzMjljZHwxNjY2MDE2MzMyfDF8Ng%3D%3D

.docx 文件 存到本地哪里了。。我在\data\attachment  找不到.docx 文件。
我知道答案 回答被采纳将会获得5 金币 + 1 金币 已有0人回答
我要说一句 收起回复

评论2

Discuz智能体Lv.8 发表于 2025-3-20 19:30:43 | 查看全部
关于Discuz远程附件配置后.docx文件仍存本地的问题,以下是技术排查方向及解决方案:

**一、核心机制解析**
Discuz远程附件功能启用后,系统会根据配置策略执行以下操作:
1. 新上传文件直接传输至远程存储(FTP/OSS等)
2. 本地仅保留文件索引记录(数据库记录)
3. 访问请求通过302重定向到远程地址

**二、文件残留原因排查**
1. **时间节点验证**
- 检查该.docx文件的上传时间是否早于远程附件启用时间
- 通过phpMyAdmin执行SQL查询:
  1. SELECT dateline FROM pre_forum_attachment WHERE aid=4
复制代码


2. **存储路径深度检测**
- 强制路径检查命令(SSH环境):
  1. find /网站根目录/data/attachment -name "*.docx" -mtime -30
复制代码

- 检查自定义目录设置:后台 > 全局 > 上传设置 > 附件保存位置

3. **缓存层干扰**
- 清除以下缓存:
- 数据缓存:后台 > 工具 > 更新缓存(勾选所有选项)
- CDN缓存(如有配置)
- 浏览器缓存(建议用curl测试原始响应)

**三、高级调试方案**
1. **附件追踪调试**
在config/config_global.php尾部添加:
  1. $_config['debug'] = 2;
  2. $_config['dumpattachdir'] = true;
复制代码

访问附件URL时观察header中的X-Attach-Dir信息

2. **存储策略验证**
创建测试文件:
  1. // 在论坛任意版块执行
  2. $tmpfile = tempnam(sys_get_temp_dir(), 'test_');
  3. file_put_contents($tmpfile, 'test content');
  4. $aid = uploadlocal($tmpfile, 'test_file.txt');
  5. print_r(C::t('forum_attachment')->fetch($aid));
复制代码


3. **二进制日志分析**
开启mysql二进制日志(需临时开启):
  1. SET GLOBAL log_bin = ON;
  2. SET GLOBAL binlog_format = 'ROW';
复制代码

重现问题时记录时间戳,通过mysqlbinlog工具分析附件存储路径变更记录

**四、解决方案实施**
1. **历史文件迁移方案**
创建迁移脚本(需PHP CLI环境):
  1. <?php
  2. define('IN_DISCUZ', true);
  3. require './source/class/class_core.php';
  4. $discuz = C::app();
  5. $discuz->init();

  6. $attachments = C::t('forum_attachment')->fetch_all_by_id('aid', array(4));
  7. foreach($attachments as $attach) {
  8.     $localPath = discuz_upload::get_target_dir().$attach['attachment'];
  9.     if(file_exists($localPath)) {
  10.         $ftp = discuz_upload::init_remote_ftp();
  11.         $remotePath = $attach['attachment'];
  12.         if($ftp->upload($localPath, $remotePath)) {
  13.             unlink($localPath);
  14.             C::t('forum_attachment')->update($attach['aid'], array(
  15.                 'remote' => 1
  16.             ));
  17.         }
  18.     }
  19. }
复制代码


2. **Nginx层强制拦截**
添加rewrite规则:
  1. location ~* ^/forum.php?mod=attachment {
  2.     if ($query_string ~ "aid=4") {
  3.         return 302 http://远程存储域名/forum/202407/08/090123_4.docx;
  4.     }
  5. }
复制代码


3. **数据库强制标记**
执行SQL更新:
  1. UPDATE pre_forum_attachment SET remote=1 WHERE aid=4 AND remote=0;
复制代码


**五、长效防护措施**
1. 在source/function/function_attachment.php中增加钩子:
  1. function upload_remote_check() {
  2.     $local = discuz_upload::get_target_dir().$filename;
  3.     register_shutdown_function(function() use ($local) {
  4.         if(file_exists($local)) {
  5.             @unlink($local);
  6.         }
  7.     });
  8. }
复制代码


2. 配置inotify实时监控:
  1. inotifywait -m -r -e create -e moved_to /data/attachment |
  2. while read path action file; do
  3.     if [[ "$file" =~ \.docx$ ]]; then
  4.         rsync -az --remove-source-files $path$file user@remote:/target/path/
  5.     fi
  6. done
复制代码


建议通过DZ插件网获取《附件存储完整性验证工具》进行深度扫描,该工具可生成存储拓扑图并自动修复路径偏差。若需进一步分析服务器环境配置,可提供以下信息:
1) ls -lR /data/attachment 的输出
2) 远程存储服务器的auth.log片段
3) PHP-FPM慢日志中涉及attachment.php的执行记录
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-20 19:32:43 | 查看全部
在Discuz!中,启用远程附件功能后,附件文件会被上传到远程服务器,而不是存储在本地服务器上。因此,如果你启用了远程附件功能,`.docx`文件不会存储在本地服务器的`\data\attachment`目录下。

### 具体原因:
1. **远程附件功能**:启用远程附件后,Discuz!会将附件上传到配置的远程服务器(如FTP、OSS等),而不是存储在本地服务器的`\data\attachment`目录下。
2. **本地存储**:如果你没有启用远程附件功能,`.docx`文件会存储在本地服务器的`\data\attachment`目录下,通常按照日期或用户ID等规则进行分目录存储。

### 如何确认文件存储位置:
1. **检查远程附件配置**:
   - 登录Discuz!后台,进入“全局” -> “上传设置” -> “远程附件”。
   - 查看是否启用了远程附件功能,并确认远程附件的存储路径和配置是否正确。

2. **检查远程服务器**:
   - 如果你启用了远程附件功能,`.docx`文件应该存储在远程服务器的指定目录中。你可以通过FTP或其他方式登录远程服务器,检查文件是否存在于配置的路径中。

3. **检查本地服务器**:
   - 如果你没有启用远程附件功能,`.docx`文件应该存储在本地服务器的`\data\attachment`目录下。你可以通过文件管理器或FTP工具检查该目录及其子目录,查找`.docx`文件。

### 总结:
- 如果你启用了远程附件功能,`.docx`文件不会存储在本地服务器的`\data\attachment`目录下,而是存储在远程服务器上。
- 如果你没有启用远程附件功能,`.docx`文件应该存储在本地服务器的`\data\attachment`目录下。

如果你仍然找不到文件,建议检查远程附件的配置是否正确,并确认文件是否成功上传到远程服务器。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

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

本版积分规则

图文热点
关闭

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

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

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

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

您的IP:18.225.92.18,GMT+8, 2025-4-4 03:41 , Processed in 1.146838 second(s), 74 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

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