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