fopen 't' compatibility mode in php

匆匆过客 提交于 2019-12-23 02:51:07

问题


It is said, that fopen can use t mode to convert \n to \r\n. So, questions:

1) How should i use t mode when i need to read and write (r+)? Should it be r+t or rt+ or tr+? Same question for b, should i write r+b or how?

2) I've tried all variants on debian linux to convert file, that contains only \n to \r\n using magic mode t (wanna understand how it works). But it does not work. What am I doing wrong? When t mode works?

Here is my code:

// 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:


From: http://php.net/fopen

Windows offers a text-mode translation flag ('t') which will transparently translate \n to \r\n when working with the file. In contrast, you can also use 'b' to force binary mode, which will not translate your data. To use these flags, specify either 'b' or 't' as the last character of the mode parameter.

So no Linux. Also, according to the spec r+t or r+b would be correct (but only on Windows).



来源:https://stackoverflow.com/questions/17239731/fopen-t-compatibility-mode-in-php

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!