php操作大文件

xjwchy 2011-08-02 10:53:34
用fopen fseek 等操作超过2g的文件就会出错
php现在只支持到2g的文件
请问怎么解决呢,对文件大小没有限制呢?
...全文
169 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xjwchy 2012-01-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xjwchy 的回复:]
引用 7 楼 xjwchy 的回复:
切分文件 总感觉不是好的解决这个问题的方法

谁还有好方法啊
[/Quote]
首先32位系统下通过php本身是不可以读取大于2g的文件,但是通过写php的扩展程序时可以的,windows下的话使用vc的一些读取文件的接口就可以,linux系统的话那就更简单了。但是这种解决方法可移植性太差。我现在是问一下有没有其他的解决方法。
xjwchy 2012-01-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xjwchy 的回复:]
切分文件 总感觉不是好的解决这个问题的方法
[/Quote]
谁还有好方法啊
jsonyv 2012-01-09
  • 打赏
  • 举报
回复
LZ不是扯淡么,你想支持2G以上的文件读取就不要用32位的系统,人家foolbirdflyfirst已经非常专业的告诉你答案了,你还在问个鸟,实话告诉你,你想在32位系统下读2G以上的文件就好比你现在只有1万快钱你又不贷款想买100万的房子,可能么?
木目子 2011-08-03
  • 打赏
  • 举报
回复

$fp = fopen ("file2g.txt", "r");
$content = '';
$test = false;
while (!feof($handle)) {
$r = fread($handle, 1); //比如每次读一个字节
if($r=="\n"){
//假设你是用\n对字符串进行分割的
if($content=='aaaa'){
$test=true;
}
$content = '';
}else{
$content .= $r;
}
}
fclose($handle);

这就是指针读取了,你的文件总是有规则的吧,按规则切分开了,做你要的判断,如果你把读取的所有字符串直接赋值给一个变量的肯定也是不能操作的了

2g的文件,建议最好分割成多文件进行操作
xjwchy 2011-08-02
  • 打赏
  • 举报
回复
2楼的 怎么用啊?
有没有例子啊?
小弟是个菜鸟啊
回忆那么久 2011-08-02
  • 打赏
  • 举报
回复
路过 学习、
木目子 2011-08-02
  • 打赏
  • 举报
回复
用指针啊
foolbirdflyfirst 2011-08-02
  • 打赏
  • 举报
回复
32位php,2G 约为 PHP_INT_MAX/pow(1024,3),再往前+1就溢出了.
xjwchy 2011-08-02
  • 打赏
  • 举报
回复
切分文件 总感觉不是好的解决这个问题的方法
foolbirdflyfirst 2011-08-02
  • 打赏
  • 举报
回复
归根到底是32位机地址读取问题。
如果能切分文件就切分吧。
xjwchy 2011-08-02
  • 打赏
  • 举报
回复
fseek最大偏移就是2g了,读2g后面的读不到啊
binarie 2011-08-02
  • 打赏
  • 举报
回复
不要一次全部读入到内存中,PHP是有内存限制的。
使用fseek定位文件指针,仅读取需要的部分,及时释放。

21,882

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧