![]() |
1
4
编辑: 通过RCAR更正并保存第一行。 |
![]() |
2
20
使用SPL,卢克php 5有很多迭代器优点:
更清楚的是,您可以在处理fopen时做些什么,它不会将整个文件保存在内存中,一次只保存一行,而且您可以插入它,并在任何地方重用模式,因为它已经满了oo。 |
![]() |
3
4
这是一个日志文件的文本本问题,我想提出另一个解决方案。 “在文件开头删除行”方法的问题是,添加新行的速度会非常慢,一旦它必须删除正在写入的每一行的第一行。 普通的日志文件附加只需要在文件系统中的文件末尾再写几个字节(有时还需要分配一个新的扇区,这会导致大量的碎片——为什么日志文件通常是这样)。 但这里的大问题是,当您在开始处为每一行删除一行时。必须首先将整个文件读取到内存中,然后重新编写,从而导致大量I/O到硬盘驱动器(与之相比)。更糟的是,由于PHP数组的性质,这里的“拆分为PHP数组并跳过第一行”解决方案速度非常慢。如果日志文件的大小限制非常小,或者如果写入到unooften,那么这不是问题,但是如果写入次数很多(与日志文件一样),则必须多次执行相同的大型操作,从而导致主要的性能缺陷。 这可以想象成在一条50人的线上停车。前50辆车停车很快,只要在车后面向前开就行了。但是当你到了50岁,前面的车(文件开头)必须被移走,你必须把第二辆车开到第一位,第三辆到第二辆等等,然后你才能把最后一辆车开到第50位。(这必须重复 每一个 你想停车的新车!) 我的建议是保存到不同的日志文件中,按日期排序,然后最多保存30天,等等,这样就充分利用了文件系统,它已经很好地解决了这个问题。 |
![]() |
4
2
你可以用 file() 函数将文件读取到一个行数组中,然后使用 array_slice() 删除前X行。
|
![]() |
5
0
如果可以运行Linux命令,请尝试
否则,我想你得把它读进去,然后写到另外两个文件里。 |
![]() |
6
0
或者 @Greg's 答:您可以将整个文件读入一个数组,跳过前x个多条目,然后将数组重写为该文件。 作为一种方法: http://us3.php.net/manual/en/function.file-get-contents.php
|
![]() |
7
0
典型的操作系统不提供“就地”插入或删除文件内容的功能。您需要做的是编写一个函数来读取第一个文件,并创建一个 新的 包含要保留的行的输出文件。完成后,删除旧文件并将新文件重命名为旧文件名。 在伪代码中:
与其他方法相比,这种方法的优点在于 不 要求您先将整个文件读取到内存中。您没有提到您的大小上限有多大,但是如果它是100 MB,您可能会发现将文件加载到内存中是不可接受的空间使用。 |
![]() |
8
0
这里有一个随时可用的功能
|
![]() |
9
0
下面的代码将帮助您删除文件开头的行数。
|
![]() |
7BeholdeR7 · 文件夹的重量超过其中的文件(六倍) 3 年前 |
![]() |
ilteris · 为什么程序在fscanf后崩溃 3 年前 |
![]() |
Peaceful · 使用fscanf读取C中具有未知行数的文件 3 年前 |
![]() |
NOCi · 如何将Tensorflow的结果记录到CSV文件 3 年前 |
![]() |
Oakzeh · 如何在字符串索引之前读取文件并删除字符 3 年前 |