fopen() 不尊重二进制模式

问题描述 投票:0回答:3

这是我正在尝试做的事情的片段:

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

很简单。 但是当我打开创建的文件时,我发现到处都在 0x0A 之前插入了 0x0D。我知道如果我打开文件而不二进制模式,就会发生这种情况。

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

php fopen
3个回答
-1
投票

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

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

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


-1
投票

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

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

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


-2
投票

您犯了一个典型的错误,即将数据与该数据的表示相混淆。

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

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

$file = fopen($path,  "wb");
$data = bin2hex($data);
fwrite($file, $data);
fclose($file);
© www.soinside.com 2019 - 2024. All rights reserved.