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

附件4G以上显示异常

252 2
发表于 2022-1-25 16:28:49 | 查看全部 阅读模式

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

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

×
上传附件后,小于4G的附件帖子可以正常显示大小,大于4G以上(5.21G、6.3G、7G、8、9。。)通通只显示4G,这个怎么能让附件大小正常显示呢?谢谢!
附件4G以上显示异常 附件,以上,显示,异常,上传
我要说一句 收起回复

评论2

独家记忆Lv.8 发表于 2022-1-25 16:29:14 | 查看全部
pre_forum_attachment_X 表 filesize 字段最大支持 4294967295 Bytes 文件,超出会截断。
@专家 是否考虑扩容字段?
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-19 19:13:52 | 查看全部
这个问题通常是由于PHP的整数类型限制导致的。在32位系统上,PHP的整数类型最大只能表示2^31-1(即2147483647),而在64位系统上,PHP的整数类型最大可以表示2^63-1。然而,即使是在64位系统上,PHP的某些函数在处理大文件时仍然可能会受到限制。

### 解决方案:

1. **检查PHP配置**:
   - 确保你的PHP版本是64位的,并且运行在64位的操作系统上。
   - 检查`php.ini`文件中的`upload_max_filesize`和`post_max_size`配置项,确保它们足够大以支持上传大文件。例如:
   
  1. upload_max_filesize = 10G
  2.      post_max_size = 10G
复制代码

   - 确保`memory_limit`也足够大,以处理大文件的上传和操作。

2. **修改Discuz代码**:
   - 打开`source/class/class_upload.php`文件,找到处理文件大小的部分代码。
   - 修改文件大小计算的逻辑,确保它能够正确处理大于4G的文件。例如:
   
  1. $filesize = filesize($file['tmp_name']);
  2.      if ($filesize > 4294967296) {
  3.          // 处理大于4G的文件大小
  4.          $filesize = sprintf("%u", $filesize);
  5.      }
复制代码

   - 这样修改后,文件大小将以无符号整数形式存储,避免溢出问题。

3. **数据库字段类型**:
   - 检查数据库中存储附件大小的字段类型,确保它是`BIGINT`类型,而不是`INT`类型。`INT`类型的最大值是2147483647,而`BIGINT`类型的最大值是9223372036854775807,足以存储大于4G的文件大小。
   - 如果需要修改数据库字段类型,可以使用以下SQL语句:
   
  1. ALTER TABLE `pre_forum_attachment` MODIFY `filesize` BIGINT UNSIGNED NOT NULL;
复制代码


4. **前端显示**:
   - 在前端显示文件大小时,确保JavaScript或PHP代码能够正确处理大于4G的文件大小。可以使用类似以下的代码来格式化文件大小:
   
  1. function formatSizeUnits($bytes) {
  2.          if ($bytes >= 1073741824) {
  3.              $bytes = number_format($bytes / 1073741824, 2) . ' GB';
  4.          } elseif ($bytes >= 1048576) {
  5.              $bytes = number_format($bytes / 1048576, 2) . ' MB';
  6.          } elseif ($bytes >= 1024) {
  7.              $bytes = number_format($bytes / 1024, 2) . ' KB';
  8.          } elseif ($bytes > 1) {
  9.              $bytes = $bytes . ' bytes';
  10.          } elseif ($bytes == 1) {
  11.              $bytes = $bytes . ' byte';
  12.          } else {
  13.              $bytes = '0 bytes';
  14.          }
  15.          return $bytes;
  16.      }
复制代码


### 总结:
通过以上步骤,你应该能够解决Discuz中大于4G附件显示异常的问题。如果问题仍然存在,建议进一步检查服务器环境和代码逻辑,确保所有环节都支持大文件处理。

如果你有其他问题或需要进一步的帮助,请随时联系我!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

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

本版积分规则

图文热点
关闭

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

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

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

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

您的IP:3.147.67.34,GMT+8, 2025-4-3 14:01 , Processed in 0.963760 second(s), 78 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

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