带有“wb”的PHP fopen()不起作用

sqxo8psd  于 2023-01-24  发布在  PHP
关注(0)|答案(3)|浏览(226)

下面是我正在尝试做的事情的一个片段:

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

很简单。但是当我打开创建好的文件时,我看到到处都是0x0D插在0x0A前面。我知道如果我没有二进制模式打开文件,就会发生这种情况。
但我已经明确表示我想要二进制模式。也许我的大脑不正常或什么的,所以...有人有解决办法吗?

u0sqgete

u0sqgete1#

结果,由于某种奇怪的原因,问题出在我的$path上,我的$path值是“temp”。
它会生成一个名为“temp”的文件,但拒绝以二进制模式打开它,而给这个文件一个像“temp.bin”或“temp.tmp”这样的扩展名则允许它以二进制模式工作。
现在问题解决了,但我仍然想知道为什么它是这样工作的。

rslzwgfq

rslzwgfq2#

似乎$path有问题。请确保您提供了正确的文件路径。
如果要使用动态文件名定义$路径,请在文件名前使用/。例如,$var =“/var/www/html/projectFolder/folderFile/".“Filename.fileformat”
如果你在重定向上下文中使用URL,那么根目录('/')指的是你的域的根目录。链接文件或图像的路径以及include和require指令也是如此。

xeufq47z

xeufq47z3#

您正在犯一个典型的错误,即混淆了数据和数据的表示。
假设您有一个文本文件。如果在记事本中打开它,您将看到以下内容:

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

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

相关问题