好的,我有这个设置,可以把东西写成文本,但是它实际上不会把txt写到文件中。它删除该文件,然后使用内部的数据再次创建它。
$_POST['IP']=$ip;
unlink('boot_ip.txt');
$fp = fopen($_SERVER['DOCUMENT_ROOT'] . "/boot/boot_ip.txt","wb");
fwrite($fp,$IP) ;
fclose($fp);发布于 2013-09-02 13:23:16
您的变量没有正确设置,而是相反。
快速注意:wb的意思是写二进制文件。除非这不是您的意图,我建议您只使用w。
以.txt结尾的文件名是文本,因此使用w开关。这将覆盖以前的内容。
你有:
$_POST['IP']=$ip;
unlink('boot_ip.txt');
$fp = fopen($_SERVER['DOCUMENT_ROOT'] . "/boot/boot_ip.txt","wb");
fwrite($fp,$IP);
fclose($fp);这个=> $_POST['IP']=$ip;应该是$ip=$_POST['IP'];
这个fwrite($fp,$IP);应该是fwrite($fp,$ip);
您的$IP应该是大写的,而它应该是小写的,正如您在变量中声明的那样。
注意事项:代码的unlink部分可能需要反映文件夹在服务器上的位置。
但是,我建议您不要使用unlink,因为使用它会立即抛出一个错误,因为文件可能一开始就找不到,因为它本来就已经没有链接了。
您可以不使用它,也可以使用if语句。请参阅下面的代码示例。
此外,使用w开关,将自动覆盖以前编写的内容。
如果需要将/add添加到文件中,则需要使用a或a+开关。
如果是这样的话,那么您需要使用以下方法:
$fp = fopen($_SERVER['DOCUMENT_ROOT'] . "/boot/boot_ip.txt","a");
fwrite($fp,$ip . "\n");重新格式化(测试和工作)
$ip=$_POST['IP'];
unlink('boot_ip.txt');
// use the one below here
// unlink($_SERVER['DOCUMENT_ROOT'] . "/boot/boot_ip.txt");
$fp = fopen($_SERVER['DOCUMENT_ROOT'] . "/boot/boot_ip.txt","wb");
fwrite($fp,$ip);
fclose($fp);使用下列表格:
<form action="handler.php" method="post">
<input type="text" name="IP">
<input type="submit" value="Submit">
</form>使用if语句方法。
$ip=$_POST['IP'];
if(!file_exists($_SERVER['DOCUMENT_ROOT'] . "/boot/boot_ip.txt")) {
$fp = fopen($_SERVER['DOCUMENT_ROOT'] . "/boot/boot_ip.txt","wb");
fwrite($fp,$ip);
fclose($fp);
}发布于 2013-09-02 06:52:55
传统上,这正是文本文件的工作方式。它是一个顺序访问文件,而不是一个随机访问文件。每次向文件中添加新信息时,都需要重新编写所有内容。这就是为什么对于大型项目来说,它速度慢,效率低的原因。
没有办法可以绕过它。要么从文件中读取数据,然后用新的信息重写它,要么创建一个随机访问文件。大多数语言和教室都是这样教的。这主要是因为你了解这些过程。
在实践中,如果您只是将数据附加到末尾的中,则使用
in中的unlink();将删除一个文件,因此您不需要它。
也是
请参阅:file.asp
有关如何写入文件和可用于行为的参数的
特别关注写入模式的参数: r、w、rw+等.
A可能是你想要的。
它仍然像我说的那样重新创建文件,但是为你做所有的阅读和重写,这样你就不用自己去做了。
您输入的参数"wb“确实包含w,因此我假设其中的一部分与简单的"w”相同,正如我前面所说,如果文件在写入新数据之前存在,它将清除该文件。
我的解决方案是aka,TL;DR version:
$fp=fopen("boot_ip.txt","a");(我没有像您那样使用完整的表单,但是导入更改是第二个参数a而不是wb)和unlink()的排除;)
那就写你的文章。这应该会将新数据添加到文件的末尾。
https://stackoverflow.com/questions/18567152
复制相似问题