fopen什么是b旗

nel*_*aro 1 php file-io fopen

在阅读php fopen for php 的文档时,我看到以下内容.

For portability, it is strongly recommended that you always use the 'b' flag when opening files with [fopen][1]().

什么是b标志,它有什么作用?
为什么强烈推荐?

Eki*_*kin 5

'b'标志强制二进制模式.

如果要处理二进制文件,则使用'b'标志,即.一个图像.

注意:

当您编写文本文件并想要插入换行符时,您需要为您的操作系统使用正确的行结束字符.

基于Unix的系统\n用作行结束字符,基于Windows的系统\r\n用作行结束字符,而基于Macintosh的系统\r用作行结束字符.

Windows下提供了一个文本转换标记("T"),将透明转换\n到\r\n与文件工作时.

相反,您也可以使用'b'强制二进制模式,这不会转换您的数据.

您可以使用mode参数中的"b"标志来避免转换.用法示例:

$handle_read  = fopen($filepath, 'rb');

$handle_write = fopen("/home/user/file.gif", "wb");
Run Code Online (Sandbox Code Playgroud)

所以...... 手册中明确说明了推荐的原因:

如果在处理二进制文件时未指定"b"标志,则可能会遇到奇怪的数据问题,包括损坏的图像文件和\ r \n字符的奇怪问题.

"b"标志的使用也在手册页上注明,fwrite()并且fread()是二进制安全文件读/写功能.

警告:

在区分二进制文件和文本文件(即Windows)的系统上,必须打开文件,并在fopen()模式参数中包含"b".

$filename = "c:\\files\\somepic.gif";
$handle   = fopen($filename, "rb");
$contents = fread($handle, filesize($filename));
fclose($handle);
Run Code Online (Sandbox Code Playgroud)

  • 文档没有清楚.听起来我应该为文本和二进制文件执行此操作.它像我应该只为图像或音频等二进制文件做的接缝. (2认同)