fopen什么是b旗

时间:2016-04-16 04:56:30

标签: php file-io fopen

在阅读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标志是什么?它的作用是什么? 为什么强烈推荐它?

1 个答案:

答案 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);