好的,所以我设置了这个东西来将东西写入文本,但它实际上不会将 txt 写入文件。它删除文件,然后使用里面的数据再次创建它。
$_POST['IP']=$ip;
unlink('boot_ip.txt');
$fp = fopen($_SERVER['DOCUMENT_ROOT'] . "/boot/boot_ip.txt","wb");
fwrite($fp,$IP) ;
fclose($fp);
您的变量设置不正确,而是以相反的方式完成。
快速说明: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
开关,将自动覆盖以前写入的内容。
如果您需要追加/添加到文件,那么您将需要使用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);
}
传统上,这正是文本文件的工作方式。这是一个顺序访问文件而不是随机访问文件。每次向文件添加新信息时,都需要重新编写所有内容。这就是为什么它对于大型项目来说缓慢且低效的原因。
没有办法解决它。要么从文件中读取数据,然后用新信息重新写入,要么制作一个随机访问文件。这就是它在大多数语言和课堂上的教学方式。这主要是为了让您了解流程。
但实际上,如果您只是将数据附加到末尾:
取消链接();在 php 中删除一个文件,所以你不需要它。
还
见:http ://www.w3schools.com/php/php_file.asp
关于如何写入文件以及可用于行为的参数
具体看写模式的参数:r、w、rw+等......
a 可能是您想要的。
它仍然像我说的那样重新创建文件,但会为您完成所有读取和重写,因此您不必自己动手。
您输入的参数“wb”确实包含 w。所以我假设它的一部分与简单的“w”相同,就像我之前所说的,如果文件存在,它将在写入新数据之前清除文件。
我为您提供的解决方案是 TL;DR 版本:
$fp=fopen("boot_ip.txt","a");
(我没有像你那样使用完整的形式,但是导入的变化是第二个参数a而不是wb)并且排除了unlink(); )
然后写你的。这应该将新数据添加到文件的末尾。