Php 值对于定义的数据类型太大

Php 值对于定义的数据类型太大,php,readfile,Php,Readfile,我正在php下载脚本中使用readfile() 当我尝试下载9gb大小的文件时,出现以下错误: function.readfile</a>]: failed to open stream: Value too large for defined data type in path of my file function.readfile]:打开流失败:对于我的文件路径中定义的数据类型,值太大 是否有可能修复它,或者我必须将这些文件移动到public_html目录并直接链接它们 您

我正在php下载脚本中使用readfile()

当我尝试下载9gb大小的文件时,出现以下错误:

function.readfile</a>]: failed to open stream: Value too large for defined data type in path of my file
function.readfile]:打开流失败:对于我的文件路径中定义的数据类型,值太大

是否有可能修复它,或者我必须将这些文件移动到public_html目录并直接链接它们

您很可能需要使用
CFLAGS=“-D\u FILE\u OFFSET\u BITS=64”
重新编译php,以便php能够处理大型文件。网上对此有评论

补充阅读:

  • 尽管您可能没有使用SUSE,但仍然有一些有趣的信息:

您很可能需要使用
CFLAGS=“-D\u FILE\u OFFSET\u BITS=64”
重新编译php,以便php能够处理大型文件。网上对此有评论

补充阅读:

  • 尽管您可能没有使用SUSE,但仍然有一些有趣的信息:

    • 不过你可以找到一种方法。如果您使用的是unix环境,则可以

      passthru('cat$filename')


      只要你不需要写

      你就可以找到一种方法。如果您使用的是unix环境,则可以

      passthru('cat$filename')



      只要你不需要写

      哇,用php解析9GB?也许这项工作用的工具不对~?@Shad//完全同意,但我能做些什么……我必须修复it@Shad//嗯。。嗯……事实上它不是解析。它正在读*和发送哇,用php解析9GB?也许这项工作用的工具不对~?@Shad//完全同意,但我能做些什么……我必须修复it@Shad//嗯。。嗯……事实上它不是解析。它正在阅读*并发送描述//谢谢你的回答。还有别的办法吗?我们可以更改php.ini,但不能重新编译。另外,php.net上的Brad G提到CFLAGS可能会引起问题@月亮-这是正确的。不幸的是,我不知道还有别的办法。不久前我遇到了一个类似的问题(除了大型平面文件数据库)。@FrancoisDeschenes如果我们从存储库安装,有没有简单的方法来解决这个问题?反对从头开始编译?@Chris-很抱歉没有及时回复。除了重新编译之外,我不知道有什么办法可以解决这个问题。@FrancoisDeschenes谢谢,无需道歉!我当时很紧张,我们最终用64位操作系统重建了服务器。:-)描述//谢谢你的回答。还有别的办法吗?我们可以更改php.ini,但不能重新编译。另外,php.net上的Brad G提到CFLAGS可能会引起问题@月亮-这是正确的。不幸的是,我不知道还有别的办法。不久前我遇到了一个类似的问题(除了大型平面文件数据库)。@FrancoisDeschenes如果我们从存储库安装,有没有简单的方法来解决这个问题?反对从头开始编译?@Chris-很抱歉没有及时回复。除了重新编译之外,我不知道有什么办法可以解决这个问题。@FrancoisDeschenes谢谢,无需道歉!我当时很紧张,我们最终用64位操作系统重建了服务器。:-)@Jermy Walton//还有一个问题,@Shad暗示,我担心服务器内存。使用passthru和cat命令下载文件可以吗?通过apache服务器下载文件有什么区别?您不必担心内存,因为stdin/stdout缓冲区是固定长度的。一旦cat填满了它,它就必须等到php去掉一些后才能发送更多。该文件不完全在内存中。这不是您一直想要做的事情,因为生成一个进程来处理这件事是非常昂贵的。与直接从apache服务器发送文件不同的是,与php相比,apache发送文件的速度更快,开销更少。如果可以,请始终先通过apache发送文件。@Jermy Walton//还有一个问题,@Shad暗示,我担心服务器内存问题。使用passthru和cat命令下载文件可以吗?通过apache服务器下载文件有什么区别?您不必担心内存,因为stdin/stdout缓冲区是固定长度的。一旦cat填满了它,它就必须等到php去掉一些后才能发送更多。该文件不完全在内存中。这不是您一直想要做的事情,因为生成一个进程来处理这件事是非常昂贵的。与直接从apache服务器发送文件不同的是,与php相比,apache发送文件的速度更快,开销更少。如果可以,请始终首先通过apache发送文件。