是否达到了结束性格

时间:2013-01-11 12:19:17

标签: php file file-io

总之,我使用stream_get_line读取文件的一行,替换一个字符串,然后将该行写入另一个文件。

我正在使用stream_get_line并提供“ending”参数来指示函数读取行,或者如果没有新行则读取130个字节。

我想知道的是我如何知道是否找到了第3个参数(PHP_EOL),因为我需要将相同的行(除了我的字符串替换)写入新文件。

供参考......

string stream_get_line ( resource $handle , int $length [, string $ending ] )

最后一行主要需要它,有时它会包含一个换行符,有时则不包含换行符。

我最初的想法是寻找文件的最后一行并在行中搜索换行符号,看看是否需要在我编辑的行中附加换行符。

1 个答案:

答案 0 :(得分:0)

如果流处于ASCII模式(仅在Windows上有效),您可以尝试使用fgets。该功能将包括新行,如果找到:

$line = fgets(STDIN, 131);

否则,您可以使用ftell查看读取的字节数,从而确定是否有行结束。例如,如果foo.php包含

<?php
while (!feof(STDIN)) {
    $pos = ftell(STDIN);
    $line = stream_get_line(STDIN, 74, "\n");
    $ended = (bool)(ftell(STDIN) - strlen($line) - $pos);
    echo ($ended ? "YES  " : "NO   ") . $line . "\n";
}

执行echo -ne {1..100} '\n2nd to last line\nlast line' | php foo.php将提供此输出:

NO   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
NO    29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 5
NO   3 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 
YES  78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 
YES  2nd to last line
NO   last line