PHP没有写入文件

时间:2013-09-02 06:49:49

标签: php file-io fwrite

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

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

2 个答案:

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

如果您需要附加/添加到该文件,则需要使用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);
}

答案 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(); )

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