在阅读php的documentation for php fopen时,我看到以下内容。
For portability, it is strongly recommended that you always use the 'b' flag when opening files with [fopen][1]().
b标志是什么?它的作用是什么? 为什么强烈推荐它?
答案 0 :(得分:5)
''旗帜强制二进制模式。
你使用' b'如果你想处理二进制文件的标志,即。一个图像。
注意:强>
当您编写文本文件并想要插入换行符时,您需要为您的操作系统使用正确的行结束字符。
基于Unix的系统使用
\n
作为行结束字符,基于Windows的系统使用\r\n
作为行结束字符,而基于Macintosh的系统使用\r
作为行结束字符。Windows提供文本模式转换标记(' t'),在处理文件时会将
\n
透明地翻译为\r\n
。相比之下,你也可以使用' b'强制二进制模式,它不会翻译您的数据。
您可以使用' b'来避免翻译。 mode
参数中的标志。用法示例:
$handle_read = fopen($filepath, 'rb');
$handle_write = fopen("/home/user/file.gif", "wb");
所以......推荐的原因在manual上明确说明:
如果您未指定' b'使用二进制文件时,您可能会遇到奇怪的数据问题,包括损坏的图像文件和\ r \ n字符的奇怪问题。
使用' b'在fwrite()
和fread()
的手册页上也注明了flag,它们是二进制安全文件读/写函数。
警告:强>
在区分二进制文件和文本文件(即Windows)的系统上,必须使用' b'打开文件。包含在fopen()模式参数中。
$filename = "c:\\files\\somepic.gif";
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize($filename));
fclose($handle);