这是我正在尝试做的事情的片段:
$file = fopen($path, "wb");
fwrite($file, $data);
fclose($file);
很简单。 但是当我打开创建的文件时,我发现到处都在 0x0A 之前插入了 0x0D。我知道如果我打开文件而不二进制模式,就会发生这种情况。
但我已经明确指定我想要二进制模式。也许我的大脑功能不正常或者其他什么,所以..有人有解决办法吗?
事实证明,由于某种奇怪的原因,问题出在我的 $path 上。我的 $path 值是“temp”。
它将生成名为“temp”的文件,但拒绝以二进制模式打开它。为文件提供“temp.bin”或“temp.tmp”等扩展名,使其可以在二进制模式下工作。
问题暂时解决了,但我仍然想知道为什么它会这样工作。
问题似乎出在 $path 上。请确保您提供了正确的文件路径。
如果您使用动态文件名定义 $path,请在文件名前使用 /。例如,$var =“/var/www/html/projectFolder/folderFile/”。 “文件名.文件格式”
如果您在重定向上下文中使用 URL,则根目录 ('/') 指的是您的域的根目录。这同样适用于链接文件或图像的路径以及 include 和 require 指令。
您犯了一个典型的错误,即将数据与该数据的表示相混淆。
假设您有一个文本文件。如果您在记事本中打开它,您将看到以下内容:
$str = "Hello world!";
echo bin2hex($str); // output: 48656c6c6f20776f726c6421
$file = fopen($path, "wb");
$data = bin2hex($data);
fwrite($file, $data);
fclose($file);