以下是我正在尝试做的事情的片段:
$file = fopen($path, "wb");
fwrite($file, $data);
fclose($file);
很简单。但是当我打开创建的文件时,我看到0x0D在0x0A之前到处插入。据我所知,如果我打开没有二进制模式的文件,就会发生这种情况。
但我已明确指出我想要二进制模式。也许我的大脑无法正常运作,所以..任何人都有解决方案吗?
你犯了一个经典的错误,即数据与数据的表示混淆。
假设你有一个文本文件。如果您在记事本中打开它,您将看到以下内容:
$str = "Hello world!";
echo bin2hex($str); // output: 48656c6c6f20776f726c6421
$file = fopen($path, "wb");
$data = bin2hex($data);
fwrite($file, $data);
fclose($file);
事实证明,出于一些奇怪的原因,问题在于我的$ path。我的$ path值是“temp”。
它会生成名为“temp”的文件,但会拒绝以二进制模式打开它。给文件一个像“temp.bin”或“temp.tmp”这样的扩展名允许它以二进制模式工作。
问题现在解决了,但我仍然想知道它为什么会这样。