【问题标题】:read big file with php line by line (csv file generated on a mac)用php逐行读取大文件(在mac上生成的csv文件)
【发布时间】:2014-04-06 03:42:15
【问题描述】:

如何逐行读取 php(csv 文件)中的大文件以避免内存不足? 目前,我有这个:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 72 bytes)

我几乎可以肯定我的 php 会逐行读取:

$i = 0;
    $source = fopen('falkcsvutf.csv', 'r') or die("Problem open file");
    while (($data = fgetcsv($source, 0, ";")) !== FALSE && $i < 10)
    {
        echo $data[1];
        $i++;
    }
    fclose($source);

$i

我感觉 php 的东西在我的 csv 中只有一行,但是,当我以崇高的文本打开文件时,我看到所有的行(带有行号)

该文件是一个Excel文件,保存为CSV,然后用iconv函数转换为utf8。

有什么想法吗?

【问题讨论】:

  • 这种情况有时会发生在本地主机上,但不会发生在我们的实时服务器上,我不知道如何在本地主机上修复。
  • 这是你的全部代码吗?
  • 您使用的是 Mac 吗?如果是这样,请注意PHP docs 中的auto_detect_line_endings 注释
  • 这是在实时 (linux) 服务器上,但文件是在 mac 上生成的
  • @VincentDuprez 试试ini_set("auto_detect_line_endings", true);

标签: php sql csv utf-8


【解决方案1】:

来自PHP docs

注意:如果 PHP 在读取 Macintosh 计算机上或由 Macintosh 计算机创建的文件时无法正确识别行尾,则启用 auto_detect_line_endings 运行时配置选项可能有助于解决问题。

所以检查auto_detect_line_endings的值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多