V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ning1022
V2EX  ›  PHP

服务器内存为 256M,怎么用 php 读取 10G 的文件?(面试问题)

  •  
  •   ning1022 · 2015-07-09 18:24:15 +08:00 · 5165 次点击
    这是一个创建于 3417 天前的主题,其中的信息可能已经有所发展或是发生改变。

    真的没想到好办法,求大神指点。

    19 条回复    2015-10-01 00:40:58 +08:00
    loveyu
        1
    loveyu  
       2015-07-09 18:35:25 +08:00 via Android
    用标准的文件打开方式就行了
    em70
        2
    em70  
       2015-07-09 18:42:43 +08:00 via Android
    把虚拟内存设置到20G
    maskerTUI
        3
    maskerTUI  
       2015-07-09 18:53:20 +08:00
    加钱加配置
    StarBrilliant
        4
    StarBrilliant  
       2015-07-09 18:53:51 +08:00   ❤️ 8
    一般解决方法:1楼
    小清新解决方法:2楼
    2B解决方法:3楼
    Sunyanzi
        5
    Sunyanzi  
       2015-07-09 18:58:21 +08:00
    琢磨了一下 ... 这种题我去我也得栽 ... 说得不清不楚的谁知道怎么回答 ...

    读取是啥概念 ... 把整个文件读到内存的话 ... 只能加虚拟内存 ...

    如果只是要文件中的一部分的话 ... fopen / fseek / fread 一套上去 1T 的文件我也能读 ...
    StarBrilliant
        6
    StarBrilliant  
       2015-07-09 19:03:13 +08:00
    @Sunyanzi 目测是楼主被 file_get_content 坑害了……(笑
    pichina
        7
    pichina  
       2015-07-09 19:11:14 +08:00
    哈哈,buffer难道非得跟文件一样大。
    realpg
        8
    realpg  
       2015-07-09 19:13:16 +08:00
    fopen就完了……
    难道面试官以为谁都是file_get_content么
    lilydjwg
        9
    lilydjwg  
       2015-07-09 19:17:59 +08:00   ❤️ 1
    @Sunyanzi 但是面试官就特别喜欢这种不明不白不清不楚的问题,并且会同时设定一个回答的方向甚至是标答,就像一些游戏里测试心灵契合度一样。
    ning1022
        10
    ning1022  
    OP
       2015-07-09 19:22:21 +08:00
    @StarBrilliant
    @realpg
    @Sunyanzi 我想的是file_get_contents,但是不对,我直接说这个我不会。
    dalaomj
        11
    dalaomj  
       2015-07-09 19:24:12 +08:00
    我用php处理过11末泄漏的社工库。虚拟内存、文件 方式操作。效率不到载入内存处理的十分之一。
    自己写循环处理数据,效率不到内置函数的十分之一。
    nikoukou
        12
    nikoukou  
       2015-07-10 01:44:44 +08:00
    能grep awk 正则出来以后倒入php么?
    liuweisj
        13
    liuweisj  
       2015-07-10 10:08:13 +08:00
    一行行读啊....
    liuweisj
        14
    liuweisj  
       2015-07-10 10:12:49 +08:00
    变个方式问你说不定就懂了,256MB的内存,把2G的数据库表数据下载导出,这个没问题吧
    msg7086
        15
    msg7086  
       2015-07-10 12:58:43 +08:00
    @dalaomj 目测是操作有问题……
    Karblue
        16
    Karblue  
       2015-07-10 13:24:31 +08:00
    分段读取就是。又没叫你把10G的文件全读进内存中
    phpdb
        17
    phpdb  
       2015-07-15 16:17:49 +08:00
    这道题都没说清楚读10G的文件后要怎么处理。
    如果仅仅是读取就用fread限定字节长度,分段循环读取,每次循环读取处理完就unset了,多花点时间,多大的文件都可以读完。
    julyclyde
        18
    julyclyde  
       2015-07-22 22:47:55 +08:00
    只有256M的公司你也应聘?
    zonghua
        19
    zonghua  
       2015-10-01 00:40:58 +08:00
    buffer
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2803 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 09:50 · PVG 17:50 · LAX 01:50 · JFK 04:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.