0

好的,所以我设置了这个东西来将东西写入文本,但它实际上不会将 txt 写入文件。它删除文件,然后使用里面的数据再次创建它。

$_POST['IP']=$ip;
unlink('boot_ip.txt');
$fp = fopen($_SERVER['DOCUMENT_ROOT'] . "/boot/boot_ip.txt","wb");
fwrite($fp,$IP) ;   
fclose($fp);
4

2 回答 2

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开关,将自动覆盖以前写入的内容。

如果您需要追加/添加到文件,那么您将需要使用aa+开关。

如果是这种情况,那么您将需要使用以下内容:

$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-02T13:23:16.560 回答
0

传统上,这正是文本文件的工作方式。这是一个顺序访问文件而不是随机访问文件。每次向文件添加新信息时,都需要重新编写所有内容。这就是为什么它对于大型项目来说缓慢且低效的原因。

没有办法解决它。要么从文件中读取数据,然后用新信息重新写入,要么制作一个随机访问文件。这就是它在大多数语言和课堂上的教学方式。这主要是为了让您了解流程。

但实际上,如果您只是将数据附加到末尾

取消链接();在 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(); )

然后写你的。这应该将新数据添加到文件的末尾。

于 2013-09-02T06:52:55.887 回答