【问题标题】:fopen what is the b flagfopen 什么是 b 标志
【发布时间】:2016-04-16 04:56:29
【问题描述】:

在阅读documentation for php fopen for php 时,我看到以下内容:

为了可移植性,强烈建议您在使用fopen() 打开文件时始终使用“b”标志。

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

【问题讨论】:

  • 它提供了关于您所说的上述注释的更多信息。它强制二进制模式。 "如果您在处理二进制文件时没有指定 'b' 标志,您的数据可能会遇到奇怪的问题,包括损坏的图像文件和 \r\n 字符的奇怪问题。"
  • @Ekn 为什么不回答? :)
  • @DiligentKeyPresser 好吧,作为答案添加,但起初我实际上认为也许我应该标记这个问题,因为答案在问题本身之内:p
  • 一切都在您在问题中引用的Note上方的Note中进行了解释。

标签: php file-io fopen


【解决方案1】:

“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");

所以...建议这样做的原因在manual 上明确说明:

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

fwrite()fread() 的手册页上也注明了“b”标志的用法,它们是二进制安全文件读/写函数。

警告:

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

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

【讨论】:

  • 文档不清晰。听起来我应该对文本和二进制文件都这样做。看起来我应该只对图像或音频之类的二进制文件进行处理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
  • 2011-12-04
  • 1970-01-01
  • 2023-03-03
  • 2018-11-07
  • 2018-09-26
  • 2013-01-15
相关资源
最近更新 更多