PHP:fread和换行符

PHP:fread和换行符,php,newline,fread,Php,Newline,Fread,如果我制作一个简单的文本文件,如以下所示: first line. second line. 0 : 66 69 72 73 74 [first] 0 : 20 6c 69 6e 65 2e [ line.] 0 : 0a [.] 0 : 73 65 63 [sec] 并按以下方式应用fread: $fh = fopen("test_file_three.txt",'r') or die("Error attempting to open file."); $first_word

如果我制作一个简单的文本文件,如以下所示:

first line.
second line.
 0 : 66 69 72 73 74 [first]
 0 : 20 6c 69 6e 65 2e [ line.]
 0 : 0a [.]
 0 : 73 65 63 [sec]
并按以下方式应用fread:

$fh = fopen("test_file_three.txt",'r') or die("Error attempting to 
open file.");
$first_word = fread($fh,5);
$second_word = fread($fh,6);
$third_word = fread($fh,1);
$fourth_word = fread($fh,3);
echo $first_word;
echo "<br />";
echo $second_word;
echo "<br />";
echo $third_word;
echo "<br />";
echo $fourth_word;
echo "<br />";
(或者,用==代替==) 然后它被证明是假的;测试$newline_char='\n';然而,在这种情况下,if语句可以很好地工作。这里发生了什么?是否存储了换行符?

=
操作符检查值和类型

$x===$y
如果$x等于$y,并且它们的类型相同,则返回true

我假设它接收并存储新行字符

你的假设是正确的

根据您创建文件的方式,它将是
\n
(在Unix、OS X上)或
\r\n
(在Windows上)

确保检查编辑器的行尾字符

这里发生了什么

if的计算结果为false,因为
'\n'
表示反斜杠和
n
字符

使用双引号获取换行符:
“\n”
,您的if应计算为
true


我真的建议您使用hextump函数,这样您就可以确切地知道字符串中存储了什么

通过调用
hex\u dump
而不是
echo
来调整代码:

hex_dump($first_word);
hex_dump($second_word);
hex_dump($third_word);
hex_dump($fourth_word);
给我以下信息:

first line.
second line.
 0 : 66 69 72 73 74 [first]
 0 : 20 6c 69 6e 65 2e [ line.]
 0 : 0a [.]
 0 : 73 65 63 [sec]

您可以看到,
$third\u word
由一个单字节
0x0a
,它是换行符(
\n
)的二进制表示形式。

可能不是
\n
可能是
\r
,也可能只是```。单引号表示文字字符串,可能需要尝试双引号。