PHP:使用fopen()创建文件会在字符串中产生“神秘”的值,重复使用现有文件也是如此。

3

我正在尝试使用fopen()将一个长字符串(>700.000个字符)保存到服务器上的文件中。

$file = fopen($filename, 'w+');
fwrite($file, $content);
fclose($file);
echo $content;

但是,只有当文件已经存在时,这才会导致正确的文件内容。如果文件不存在,则会创建具有“神秘”内容的文件,这对我来说毫无意义。(虽然 $content 的回显显示了正确的值)
以下是文件前几个字符的示例:
“‹­W_oÛ6N€}VÃШ,Ë©“8µ téþ´ÈÖ¬ÍÐm/%ž$Ö4©‘”tè7Û۾؎”
当我重新加载脚本时,文件已经存在并且内容被正确地写入和回显,就像之前一样。
即使我通过 FTP 自己创建文件(无论它以前有什么内容,我也尝试过“Hello”),这也有效。只要文件已经存在,一切都好。
非常奇怪的事实是,如果我插入 var_dump 来查看特定点上 $content 的值,那么文件将被写入正确的内容,但 echo 返回“神秘”的字符串。var_dump 似乎总是具有正确的值。
我已经尝试使用几乎所有不同的 fopen() 模式,如 'wb'、'wb+'、'wt'、'wt+'、'xt' 等等。我检查了路径、权限并搜索了整晚的 Google。但没有成功。
这让我感到非常困扰,因为我只是看不到哪里出了问题或者我错过了什么要检查的东西。
希望你能帮助我。非常感谢!

你可以尝试使用 file_put_contents($filename, $content); 并确认问题是否仍然存在吗? - N.B.
你好,非常感谢,但问题仍然存在。 - Chris
请发布脚本的全部内容,仅凭您发布的这几行代码,我们无法确定可能出现了什么问题。 - N.B.
1个回答

0

或许可以使用 utf8_encode() 函数

$content = utf8_encode("text dsdasasd"); 
$file = fopen($filename, 'w+');
fwrite($file, $content);
fclose($file);
echo $content; 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接