PHP fopen()与“wb”无法正常工作

问题描述 投票:2回答:2

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

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

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

但我已明确指出我想要二进制模式。也许我的大脑无法正常运作,所以..任何人都有解决方案吗?

php fopen
2个回答
0
投票

你犯了一个经典的错误,即数据与数据的表示混淆。

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

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

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

0
投票

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

它会生成名为“temp”的文件,但会拒绝以二进制模式打开它。给文件一个像“temp.bin”或“temp.tmp”这样的扩展名允许它以二进制模式工作。

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

© www.soinside.com 2019 - 2024. All rights reserved.