【问题标题】:Append File Chunks to a 2GB File Using PHP使用 PHP 将文件块附加到 2GB 文件
【发布时间】:2012-07-25 11:43:28
【问题描述】:

我正在使用 Resumable.js 库以 1 MB 的块上传文件,然后在 32 位 linux 服务器(PHP 5.3.14、Apache 2.0)上使用 PHP 将它们拼凑在一起

这很好用,除了超过 2GB 的文件。

当我上传大于 2GB 的文件时,它似乎工作正常,但当您实际查看文件属性时,大小始终为 2147483648 字节。

根据我的阅读,我理解这是 PHP 使用 32 位整数的限制。

我已阅读到设置 CFLAGS="-D_FILE_OFFSET_BITS=64" 标志并重新编译 PHP 将允许 PHP 打开大于 2GB 的文件。

我的问题是,如果我这样做,这会解决我的问题,还是打开文件不仅仅是问题,还有文件的附加?

如果这能解决我的 2GB 问题,是否还有(更高的)理论上的最大文件大小?

如果我完全偏离了基础并且这个标志不能解决我的问题,除了切换到 64 位服务器之外,还有其他潜在的解决方案吗?

【问题讨论】:

  • 哪个文件系统?通常 PHP 对大文件没有问题(即使我总是建议您使用 64 位系统),因此我猜这是使用的文件系统的限制。

标签: php file-io append 32-bit chunks


【解决方案1】:

Linux 在 32 位机器上的文件大小限制为 2GB(请参阅http://linuxmafia.com/faq/VALinux-kb/2gb-filesize-limit.html)。

您可能需要考虑将整个文件拆分成更小的块,或者使用 64 位机器。出于性能目的,在许多系统中通常会避免使用大于 GB 的文件。

【讨论】:

  • 嗯……嗯,我可以通过 FTP 上传大于 2GB 的文件……抱歉,我想我假设 Linux 操作系统是 32 位的,基于我知道的事实安装了 32 位版本的 PHP。如果它是 32 位或 64 位,我必须让我的客户验证他的共享主机。我可以通过 FTP 上传大于 2GB 的文件,这似乎表明我有一个安装了 32 位版本 PHP 的 64 位操作系统?
  • 这很有可能——我曾经在 Redhat 服务器上遇到过这个问题,它带有很多软件的 32 位版本,即使机器是 64 位的。
  • 仍在等待确定服务器是 32 位还是 64 位,但让我们假设它是 64 位操作系统(因为我可以通过FTP) 与 32 位版本的 PHP。您认为设置 CFLAGS="-D_FILE_OFFSET_BITS=64" 标志并重新编译 PHP 会解决我的问题,还是我仍然需要安装 64 位版本的 PHP?
  • 如果它快速且易于测试,您可以尝试重新编译,但重新安装 64 位版本可能会更干净。
  • @user1555774 如果这没有回答您的问题或接受答案,您能否提供更新?
猜你喜欢
  • 2010-12-07
  • 2012-12-14
  • 2011-12-15
  • 2021-07-25
  • 2019-08-06
  • 1970-01-01
  • 2011-01-14
相关资源
最近更新 更多