当前位置: 首页 > 编程笔记 >

从PHP中的文件中删除最后一行

阎成天
2023-03-14
本文向大家介绍从PHP中的文件中删除最后一行,包括了从PHP中的文件中删除最后一行的使用技巧和注意事项,需要的朋友参考一下

从文件中删除最后一行是一个简单的过程,只需几行代码即可完成。

// 将文件读入数组
$lines = file('file.txt');
 
// 从数组中弹出最后一项 
array_pop($lines);
 
// 将数组连接回字符串
$file = join('', $lines);
 
// 将字符串写回到文件中 
$file_handle = fopen('file.txt', 'w');
fputs($file_handle, $file);
fclose($file_handle);

此脚本中方法的局限性在于,如果文件很大,则将整个文件传递到数组中将占用大量内存,从而有可能导致服务器崩溃。最好的方法不是执行此操作,而是从文件末尾开始直到找到第一个换行符为止。以下脚本将一次咬掉50个字符,直到找到换行符为止(而不是文件末尾的换行符)。在这一点上,循环退出,直到找到的换行符被写回到文件中为止。

// 文档名称
$filename = 'file.txt';
 
// 打开文件
$file_handle = fopen($filename, 'r');
 
// 设置循环变量
$linebreak  = false;
$file_start = false;
 
// 要查看的字节数
$bite = 50;
 
// 文件大小
$filesize = filesize($filename);
 
// 将指针放在文件末尾。
fseek($file_handle, 0, SEEK_END);
 
while ($linebreak === false && $file_start === false) {
    // 获取当前文件位置。
    $pos = ftell($file_handle);
 
    if ($pos < $bite) {
	// 如果位置小于一口,则转到文件的开头
        rewind($file_handle);
    } else { 
        // 将$bite个字符移回文件
        fseek($file_handle, -$bite, SEEK_CUR);
    }
 
    // 将文件的$bite个字符读入字符串。
    $string = fread($file_handle, $bite) or die ("Can't read from file " . $filename . ".");
 
    /* If we happen to have read to the end of the file then we need to ignore 
     * the last line as this will be a new line character.
     */
    if ($pos + $bite >= $filesize) {
        $string = substr_replace($string, '', -1);
    }
 
    // 由于我们将fred()前进到文件中,因此需要备份$bite字符。 
    if ($pos < $bite) {
	// 如果位置小于一口,则转到文件的开头
        rewind($file_handle);
    } else { 
        // 将$bite个字符移回文件
        fseek($file_handle, -$bite, SEEK_CUR);
    }
 
    // 我们读取的字符串中是否有换行符?
    if (is_integer($lb = strrpos($string, "\n"))) {
        // 将$linebreak设置为true,以便我们跳出循环
        $linebreak = true;
        // 文件中的最后一行在换行符之后
        $line_end = ftell($file_handle) + $lb + 1; 
    }
 
    if  (ftell($file_handle) == 0) {
       // 如果我们位于文件的开头,请跳出循环。 
       $file_start = true;
    }
}
 
if ($linebreak === true) {
    // 如果找到换行符,则将文件读入字符串以写入而无需最后一行。
    rewind($file_handle);
    $file_minus_lastline = fread($file_handle, $line_end);
 
    // 关闭档案
    fclose($file_handle);
 
    // 以写入模式打开文件并截断​​它。
    $file_handle = fopen($filename, 'w+');
    fputs($file_handle, $file_minus_lastline);
    fclose($file_handle);
} else {
    // 关闭档案, nothing else to do.
    fclose($file_handle);
}

该脚本使用fseek()和ftell()以小增量在文件中向后移动。我已经用从几千字节到超过100兆字节的一些文件大小进行了测试,并且可以非常快速地工作。比将文件转换为数组快得多。

 类似资料:
  • 问题内容: 我打算使用Java擦除文本文件中的最后一行;但是,下面的代码将删除所有内容。 问题答案: 如果要从文件中删除最后一行而不创建新文件,则可以执行以下操作: 从倒数第二个字节开始,查找换行符,然后继续向后搜索,直到找到一个。然后在该换行符之后截断该文件。 如果最后一个字符是换行符(即最后一行的末尾),则从第二个最后一个字节而不是最后一个字节开始。

  • 我一直在使用pandas导入CSV,但每次尝试使用它时,我都会得到一个随机的额外行,这会导致代码中的错误。我如何完全抹去这一行? 我用来导入它的代码是:import itertools import copy import networkx as nx import pandas as pd import Matplotlib.pyplot as plt import csv 我的表是一个简单的I

  • 问题内容: 在互联网上浏览后,我来了。 假设我已经制作了一个文本文件,内容为: 好吧,我想从此文本文件中删除最后一个字符(在本例中为)。 因此,现在文本文件应如下所示: 但是我不知道该怎么做。 我所需要的或多或少是对HDD上文本文件的单个退格功能。 这需要在Linux上工作,因为这就是我正在使用的。 问题答案: 用于从末尾寻找1个位置,然后用于删除文件的其余部分: 这对于单字节编码工作正常。如果您

  • 问题内容: 如何使用python删除文件的最后一行? 输入文件示例: 输出文件示例: 我创建了以下代码来查找文件中的行数-但我不知道如何删除特定的行号。 问题答案: 您可以使用上面的代码,然后: 这将为您提供包含除最后一行以外的所有行的行数组。

  • 问题内容: 我有一个名为的文件和一个名为的字符串,我知道该字符串是该文件的完整行,但是我不知道其行号,并且我想从文件中删除它,该怎么办? 可以使用awk吗? 问题答案:

  • 我想从名为"fajlovi"的文件夹中删除文件。多个和单个删除应该工作。但是它会删除文件夹中的第一个文件(文件夹中文件数组中的0位置)。如果我检查任何文件,它将删除前4个文件,而不是我检查的文件。下面是代码: 1.这是页面的截图: 2.然后我检查要删除的图像: 4.再次进入页面后,我们可以看到错误的图像被删除: