【发布时间】:2017-11-25 20:16:04
【问题描述】:
我正在使用 txt 文件作为项目的数据库。我阅读它,将其转换为带有分隔符的数组,然后处理数组(如 id、title、text..)
但是现在,我将不得不在我的文本数据库中添加大量文本,而且我有点担心,我的文件迟早会变大,我会遇到内存问题,而我的服务器提供商赢了不开心:)
到目前为止,我的想法是将我的数据库拆分为两个文件:一个包含 id 和文本,第二个包含 id 和标题 - 以及保存第一行的行:
第一个文件:
id|text
15|Lorem ipsum dolor sit amet, consectetur adipiscing elit...
第二个文件:
id|title|line
15|Lorem ipsum|2
..并找到一种方法来读取第一个(大)文件而不将其解析为数组,只需转到我从第二个文件中得到的行,然后 em> 将其解析为数组以与我的代码一起使用。
我的两个问题:
第一,当我将一行附加到文本文件时,我(还)不知道如何获得行号作为回报。一个想法是再次读取文件,并计算它的行数,但我认为这对我的内存泄漏担忧没有帮助:)
二,即使我有行号,我的选择是逐行读取大文件,并在整数停止在我的行时停止。这是我能做到的最好方法吗?
感谢您的宝贵时间,我希望我糟糕的英语和 PHP 知识有任何意义 :)
--
TL;DR:我想解析一个大的 txt 文件,并寻求帮助 a) 在我向其附加内容时知道该行,以及 b) 去阅读该行,而不阅读所有文件。
【问题讨论】:
-
你的问题太长了,没有代码。没有人会帮助你。
-
如果文件足够大以至于您可能无法阅读它,您可以使用a generator。
-
如果您依赖数据并且有很多访问者,我不推荐使用文本文件。 PHP 不能(据我所知,并且自己的测试已经显示)让两个用户同时打开同一个文件。第一个用户将打开该文件,而第二个用户 PHP 将无法打开该文件,因此它认为它不存在。因此它会创建文件并且您的所有数据都会丢失。
-
由于英语不是我的母语,我正在尽我所能解释我的问题:) 我理解它的重要性,人们没有时间阅读所有内容,不过,你说得有道理。
-
但我同意安德烈亚斯的观点。这是一个适当的数据库的工作。 SQLite 将使用单个文件,如果它没有很多用户,它可能是合适的。