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