php中的fopen't'兼容模式

时间:2013-06-21 16:09:02

标签: php fopen

据说,fopen可以使用t模式将\n转换为\r\n。所以,问题:

1)当我需要读写(t)时,我应该如何使用r+模式?它应该是r+t还是rt+还是tr+?同问b,我应该写r+b还是怎么写?

2)我已经尝试使用debian linux上的所有变种来转换文件,使用魔术模式\n只包含\r\nt(想了解这个怎么运作)。但它不起作用。我究竟做错了什么? t模式有效吗?

这是我的代码:

// Write string with \n symbols
$h = fopen('test.file', 'wt');
fwrite($h, "test \ntest \ntest \n"); // I've checked, after file is being created
fclose($h);                          // \n symbols are not substituted to \r\n

// Open file, that contains rows only with \n symbols
$h = fopen('test.file', 'rt');
$data = fread($h, filesize('test.file'));
fclose($h);

// I want to see what's inside
$data = str_replace("\n", '[n]', $data);
$data = str_replace("\r", '[r]', $data);

// finally i have only \n symbols, \r symbols are not added
var_dump($data);

1 个答案:

答案 0 :(得分:2)

来自:http://php.net/fopen

  

Windows 提供文本模式转换标志('t'),在使用该文件时,它会透明地将\ n转换为\ r \ n。相反,您也可以使用'b'强制二进制模式,这不会转换您的数据。要使用这些标志,请指定'b'或't'作为mode参数的最后一个字符。

所以没有Linux。此外,根据规范r+tr+b将是正确的(但仅限于Windows)。