0

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

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

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

以供参考...

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

它主要用于最后一行,有时会包含换行符,有时不包含。

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

4

1 回答 1

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
于 2013-01-11T12:49:21.257 回答