关于PHP的fseek()方法,究竟是什么偏移(位置)?

时间:2015-07-01 10:52:38

标签: php file-handling fseek

也许是我的英语,但PHP Manual(引用贝娄)中的解释并不能很清楚地回答我的问题。

  

要移到文件结尾之前的位置,您需要传递一个   偏移中的负值,并设置为SEEK_END。

我有一个文件,我需要写一下(比方说)第5行。我应该如何锻炼正确的偏移?

我知道它不仅仅是(5)行号。所以我猜测现有数据的总长度直到第5行的开头。 如果是这样,每行文件有任何特定长度,或者(很可能)它是基于行的内容的变量?如果它的变量应该如何找到它?

任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

以下是基于gnarf's answer here

的示例
<?php

$targetFile = './sample.txt';
$tempFile = './sample.txt.tmp';

$source = fopen($targetFile , 'r');
$target = fopen($tempFile, 'w');

$whichLine = 5;
$whatToReplaceWith = 'Here is the new value for the line ' . $whichLine;

$lineCounter = 0;
while (!feof($source)) {

    if (++$lineCounter == $whichLine) {
        $lineToAddToTempFile = $whatToReplaceWith;
    } else {
        $lineToAddToTempFile = fgets($source);
    }

    fwrite($target, $lineToAddToTempFile);
}

unlink($targetFile);
rename($tempFile, $targetFile);

将使用以下内容更改(替换)sample.txt

line one
line two
line three
line four
line five

line one
line two
Here is the new value for the line 3line three
line four
line five