gpt4 book ai didi

php - 为什么此 PHP 代码在打开时会覆盖文件内容?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:48:01 25 4
gpt4 key购买 nike

我已经使用此功能编写了一些非常复杂的 PHP 应用程序,所以我不确定这里发生了什么。

我目前正在编写一个应用程序,它使用在线历史记录来保存内容(通过 ajax 获取)。我编写的用于将用户历史存储到文件的 API 非常简单:

$myFile = "./snhistory/".$_GET["uid"];
$stringData = urldecode($_GET["name"])."\n";
$file = fopen($myFile,"a");
fwrite($file,$stringData);
fclose($file);

这看起来像是将在 name 中找到的数据加上一个新行添加到文件末尾的代码,对吧?嗯,这不是 PHP 的看法。它添加了一个名称,然后当我运行具有不同名称的代码时,它会覆盖第一个名称,只出现第二个名称。我已经尝试了所有我能想到的:

 file_put_contents($myFile,file_get_contents($myFile).$stringData);

 file_put_contents($myFile,$stringData,FILE_APPEND);

fopen($myFile,"w");
fseek($file,0,SEEK_END);

并且都产生相同的行为。 PHP 有问题还是我在这里遗漏了什么?我觉得如果代码中有问题,我尝试的第二件事就会修复它。但我不确定,这就是为什么我要问这里的每个人。

如果能提供任何帮助,我将不胜感激。

编辑:根据答案,字符串的问题在于它们包含像 ' 这样的标点符号,并且出于某种原因,url 编码和转义没有工作。阅读答案的编辑以获得最终答案。

最佳答案

尝试在您的机器上运行以下代码:

<?php
$myFile = "./myfile.txt";
$myString="hello world\n";
$fp = fopen($myFile, "a");
fwrite($fp, $myString);
fclose($fp);
?>

我第一次运行它(从命令行,使用 php app.php,它创建了一个文件,其中只有一行“hello world”。

再次运行,有两行。同样,还有三个......

这是对基本 php 安装的良好测试。如果这有效,但您的问题仍然存在,那么您正在使用的变量或目录权限等方面的问题让您陷入困境。这不是一个完整的解决方案 - 但也许可以帮助您缩小范围?

编辑根据我们在评论中的讨论,这种行为似乎取决于(URL 编码)变量($_GET("name"))的内容,并且解决方案是“清理”变量 - 摆脱导致这种覆盖行为的任何“坏”字符。我将此信息添加到答案中,这样人们就不必费力地阅读答案 - 如果您提供有关具体字符串内容导致行为出现的详细信息,这将对社区有所帮助。

关于php - 为什么此 PHP 代码在打开时会覆盖文件内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16311886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com