【问题标题】:PHP including large files - memory problemsPHP 包括大文件 - 内存问题
【发布时间】:2012-01-03 15:51:47
【问题描述】:

我在包含非常大的文件时遇到问题,因此使用了ini_set('memory_limit', '-1'); 但仍然不能包含刚刚超过 1GB 的文件。我该怎么办?

【问题讨论】:

  • 您希望包含哪种类型的超过 1GB 的文件?这是某种大型阵列吗?您是否考虑过尝试分块读取数据?
  • 您应该做的是不要包含大小为 1GB 的文件。我什至不会问为什么,从一英里外就能看出你的应用架构有问题。
  • 我的脚本为用户生成产品提要。它查看是否存在 .txt 文件,如果存在,则包含该文件,如果不存在,则生成该文件。有时文件很大,具体取决于用户拥有多少产品。
  • 那是错误的设计。 include 指令用于评估一段 PHP 可以执行的代码。它必须由词法分析器解析并转换为操作码以供以后执行。在 PHP 文件中包含提要是没有意义的,因为您没有执行任何 PHP 代码,而是试图输出一些产品费用(我只能假设它是一些文本输出,无论是 xml 还是 csv)。您应该做的是使用 fopen()、fread 和 print 函数使用分块输出。一次打开文件并输出几千字节的块。输出演出提要需要一些时间,无论是输出还是下载。

标签: php memory-management server-side-includes


【解决方案1】:

您将不得不重新考虑您的架构; PHP 的include 函数不是为处理如此大的文件而设计的;它旨在包含和评估 PHP 代码文件。在不知道文件实际包含哪些数据的情况下,很难说更多。但这个文件实际上只包含 PHP 代码似乎不太可能;听起来您正在尝试读取大量以类似 PHP 格式编码的信息。

你应该例如尝试read the file in chunks or lines 而不是使用包含。

【讨论】:

    【解决方案2】:

    您尝试加载此类文件的唯一可能原因是将其导入数据库。每个数据库都有一个用于此目的的文件加载器。 Mysql 有专门的 LOAD INFILE 来处理这个问题。我建议先在数据库中获取数据,然后使用 PHP 或 MySQL 将数据转换为您的需要。使用 PHP 解析 1GB 的文件可能不是 PHP 或您的资源的最佳使用方式。

    【讨论】:

      猜你喜欢
      • 2011-02-18
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 2016-02-02
      • 2013-10-04
      • 2012-03-14
      • 2018-07-03
      相关资源
      最近更新 更多