You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP读取9MB CSV文件时内存耗尽问题求助

PHP读取9MB CSV文件时内存耗尽问题求助

嘿,我来帮你捋捋这个问题哈~

首先得给你澄清一个关键误区:你修改的upload_max_filesize和post_max_size这俩配置,管的是文件上传阶段的大小限制,和PHP运行过程中能使用的内存完全不是一回事!你看到的错误提示里,Allowed memory size of 134217728 bytes exhausted其实是说PHP默认的运行内存限制是128MB,而你一次性把4万条CSV记录全读到内存里(比如都存到$linhas数组里),到渲染视图的时候就把内存撑爆了。

给你几个实用的解决办法:

  • 临时调高内存限制(快速应急):
    你可以在PHP代码的最开头加一行,临时把内存限制调大:

    ini_set('memory_limit', '256M');
    

    或者直接去php.ini文件里修改memory_limit = 256M,改完记得重启你的Web服务器(比如Apache、Nginx)。不过这只是临时救急的办法,不是长期最优解。

  • 流式处理CSV(根源解决):
    别一次性把整个CSV都塞进内存,改用逐行读取的方式,这样不管CSV有多少行,内存里只会保留当前一行的数据,占用极低。给你贴个适配你视图逻辑的代码示例:

    // 打开目标CSV文件
    $csvHandle = fopen('你的文件路径.csv', 'r');
    if ($csvHandle !== false) {
        // 先读取表头(如果你的CSV带表头的话)
        $header = fgetcsv($csvHandle);
        
        // 逐行读取并渲染单条记录
        while (($row = fgetcsv($csvHandle)) !== false) {
            echo '<div class="m-3">';
            foreach ($header as $index => $colName) {
                echo "<p>{$colName}: {$row[$index]}</p>";
            }
            echo '</div>';
        }
        fclose($csvHandle);
    }
    

    这种方法从根本上解决内存压力,就算以后CSV涨到几十MB也能轻松处理。

  • 分批传递数据到视图:
    如果你一定要把数据整理好再传给视图,那可以把4万条记录拆成小批次(比如每次1000条),分多次处理和渲染,这样每个批次占用的内存就不会超标了。

总结一下:你之前改的两个配置和这个内存错误完全不相关,要么临时扩容内存应急,要么换流式处理(强烈推荐后者)~

备注:内容来源于stack exchange,提问作者gustavo gabry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 16:28:08