1

我有一个大约 100mb 的 php 文件,里面充满了数组(只有数组)。

我制作了一个包含此文件的脚本(用于处理),首先它耗尽了默认的 Xampp 128mb 内存限制,我将它提高到 1024mb,但它只需要很长时间并且没有做任何事情。

我确定问题是由文件的绝对大小造成的,因为我已经尝试删除所有代码行,只留下包含和回显让我知道它何时完成执行,并且它做同样的事情(这将永远持续),我还尝试再次以单独和相同的方式运行 100mb 文件。

一个 10mb 的文件也需要很长时间,但一个类似的 1mb 文件几乎可以立即读取和执行,所以问题一定不仅仅是文件大小。

我避免将 c++ 用于一个简单的项目,因为 php 对我来说更容易,并且将要执行的任务不需要受益于如果它已经在 c++ 中完成它会增加的速度但如果我没有运气解决这个问题,我想我将不得不这样做。


编辑

不使用数据库的原因: 1-制造它的人没有使用数据库,如果我不能先用它做某事,就很难将它存储在有组织的数据库中,比如只是阅读它,复制它的一部分或放入内存或其他东西。

2-我没有使用数据库的经验,因为我在 php 中做过的几乎所有事情都不需要大量存储数据,最多 50kb,如果我正在考虑一个大项目或大量数据作为这个,我肯定会,但我一开始并没有把这件事弄得一团糟,现在我必须撤消它。

3-当现在每台计算机都有足够的内存以适应整个操作系统时,必须在硬盘驱动器中存储一小部分数据(如 10mb)的逻辑非常难以理解,除非有人对此给出很好的解释,如果我有的话同时访问很多上述文件我会理解,但就像我说的,这是一个简单的项目,这是在给定时间将访问的唯一文件这甚至不是为了制作某种网站,而是为了运行几次并完成它。

4

1 回答 1

2

第 1 步:扔掉 Web 服务器。某处应该有一个 php 可执行文件,只需运行您的脚本:/path/to/php script.php

这样你至少会直接看到正在发生的事情。

第 2 步:确保您实际上有足够的可用 RAM。如果没有……买一台更好的机器。PHP 数组是一个非常复杂的结构,如果你不这样做,它会在每次迭代中交换进出。

第 3 步:确保问题出在 include 上。在它之后添加一些回声,看看它是否执行。

如果一切都失败了,请尝试逐行解析文件。根据格式,对代码进行 eval() 或使用正则表达式解析可能更容易,这取决于您。

还:

3-必须在硬盘驱动器中存储一小部分数据(如 10mb)的逻辑

无论如何,任何体面的数据库都会在 RAM 中保留一份数据副本。不同之处在于 DBMS 已经过优化,可以有效地存储和访问它。当然,通过将整个数据集放入程序中可以更有效地完成一些任务,但您不想为此使用网页。(见上面的步骤 1)

于 2012-09-16T22:44:44.787 回答