我有一个大约100mb的php文件,里面装满了数组(只有数组)。
我制作了一个包含这个文件的脚本(用于处理),首先它耗尽了默认的Xampp 128mb内存限制,我把它提升到了1024mb,但它只需要永远而且什么都不做。
我确定这个问题是由文件的大小创建的,因为我已经尝试删除所有代码行,只留下include和echo让我知道它何时完成执行,并且它完成了同样的事情(这是永远的),我也尝试再次分开和运行100mb文件。
一个10mb的文件也将永远存在,但类似的1mb文件几乎可以立即读取并执行,因此问题必须不仅仅是文件大小。
我一直避免将c ++用于一个简单的项目,而不是因为php对我来说更容易,而且执行的任务不需要从增加的速度中获益,如果它已经存在的话。用c ++完成,但如果我没有运气解决这个问题,我想我必须这样做。
修改
不使用数据库的原因: 1 - 谁做了它没有使用数据库,如果我不能先用它做一些事情就很难将它存储在有组织的数据库中,比如只是阅读它,从中复制部件或放入内存什么的。
2 - 我没有使用数据库的经验,因为我在PHP中做过的所有事情都不需要大量的存储数据,最多50kb,如果我正在考虑一个大项目或巨大的像这一块的数据块,我绝对会,但我没有开始这个混乱,现在我必须撤消它。
3 - 当现在每台计算机都有足够的内存以适应整个操作系统时,必须将一小部分数据(如10mb)存储在硬盘中的逻辑几乎是不可理解的,除非有人给出了很好的解释,如果我必须同时访问很多所说的文件,我会理解,但就像我说的,这是一个简单的项目,这是在给定时间访问的唯一文件,这甚至不是为了制作某种类型的网站,这是运行几次并完成它。
答案 0 :(得分:2)
第1步:抛弃Web服务器。某处应该有一个php可执行文件,只需运行你的脚本:/path/to/php script.php
这样你至少可以直接看到发生了什么。
第2步:确保您确实有足够的可用内存。如果不是......得到一台更好的机器。 PHP数组是一个非常复杂的结构,如果不这样,它将交换进出每次迭代。
第3步:确保问题与include有关。在它之后添加一些回声,看它是否执行。
如果其他一切都失败了,请尝试逐行解析文件。根据格式,可能更容易eval()代码或用正则表达式解析它,这取决于你。
此外:
3 - 必须存储一小部分数据(如10mb)的逻辑 硬盘
任何体面的数据库都会保留RAM中的数据副本。不同之处在于DBMS经过优化,可以有效地存储和访问它。当然,通过将整个数据集放入程序中可以更有效地完成一些任务,但是您不希望使用网页。 (见上文第1步)