【问题标题】:PHP fopen() with "wb" not working带有“wb”的PHP fopen()不起作用
【发布时间】:2015-11-20 03:21:48
【问题描述】:

这是我正在尝试做的一个 sn-p:

$file = fopen($path,  "wb");
fwrite($file, $data);
fclose($file);

足够简单。 但是当我打开创建的文件时,我看到在 0x0A 之前插入的 0x0D 无处不在。我知道如果我打开文件没有二进制模式会发生这种情况。

但我已经明确指定我想要二进制模式。也许我的大脑功能不正常或其他什么,所以..有人有解决方案吗?

【问题讨论】:

  • 您的问题不清楚,您粘贴了 WB 模式的 sn-p,但最后您说您想要二进制模式。你的问题是矛盾的
  • “wb”不是写|二进制吗?

标签: php fopen


【解决方案1】:

您犯了将数据与数据表示混淆的典型错误。

假设您有一个文本文件。如果你在记事本中打开它,你会看到以下内容:

$str = "Hello world!";
echo bin2hex($str);      // output:  48656c6c6f20776f726c6421

$file = fopen($path,  "wb");
$data = bin2hex($data);
fwrite($file, $data);
fclose($file);

【讨论】:

  • 我的 $data 是一个实际的二进制字符串;实际上是一个图像。我检查了 $data 以确保它不是 0x0D 插入的原因,所以我 100% 确定我的 $data 值是正确的。但是,之后生成的文件有插入。
【解决方案2】:

事实证明,出于某种奇怪的原因,问题出在我的 $path 上。我的 $path 值是“temp”。

它会生成名为“temp”的文件,但会拒绝以二进制模式打开它。为文件赋予“temp.bin”或“temp.tmp”之类的扩展名可以使其在二进制模式下工作。

问题现在解决了,但我仍然想知道为什么它会这样工作。

【讨论】:

    【解决方案3】:

    似乎问题出在 $path 上。请确保您提供了正确的文件路径。

    如果您使用动态文件名定义 $path,请在文件名之前使用 /。例如,$var = "/var/www/html/projectFolder/folderFile/"。 "文件名.文件格式"

    如果您在重定向上下文中使用 URL,则根目录 ('/') 指的是您域的根目录。链接文件或图像的路径以及 include 和 require 指令也是如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-25
      相关资源
      最近更新 更多