首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP不写入文件

问PHP不写入文件
EN

Stack Overflow用户
提问于 2013-09-02 06:49:48
回答 2查看 1K关注 0票数 0

好的,我有这个设置,可以把东西写成文本,但是它实际上不会把txt写到文件中。它删除该文件,然后使用内部的数据再次创建它。

代码语言:javascript
复制
$_POST['IP']=$ip;
unlink('boot_ip.txt');
$fp = fopen($_SERVER['DOCUMENT_ROOT'] . "/boot/boot_ip.txt","wb");
fwrite($fp,$IP) ;   
fclose($fp);
EN

回答 2

Stack Overflow用户

发布于 2013-09-02 13:23:16

您的变量没有正确设置,而是相反。

快速注意:wb的意思是写二进制文件。除非这不是您的意图,我建议您只使用w。

以.txt结尾的文件名是文本,因此使用w开关。这将覆盖以前的内容。

你有:

代码语言:javascript
复制
$_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+开关。

如果是这样的话,那么您需要使用以下方法:

代码语言:javascript
复制
$fp = fopen($_SERVER['DOCUMENT_ROOT'] . "/boot/boot_ip.txt","a");
fwrite($fp,$ip . "\n");

重新格式化(测试和工作)

代码语言:javascript
复制
$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);

使用下列表格:

代码语言:javascript
复制
<form action="handler.php" method="post">

<input type="text" name="IP">

<input type="submit" value="Submit">

</form>

使用if语句方法。

代码语言:javascript
复制
$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
EN

Stack Overflow用户

发布于 2013-09-02 06:52:55

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

没有办法可以绕过它。要么从文件中读取数据,然后用新的信息重写它,要么创建一个随机访问文件。大多数语言和教室都是这样教的。这主要是因为你了解这些过程。

在实践中,如果您只是将数据附加到末尾的中,则使用

in中的unlink();将删除一个文件,因此您不需要它。

也是

请参阅:file.asp

有关如何写入文件和可用于行为的参数的

特别关注写入模式的参数: r、w、rw+等.

A可能是你想要的。

它仍然像我说的那样重新创建文件,但是为你做所有的阅读和重写,这样你就不用自己去做了。

您输入的参数"wb“确实包含w,因此我假设其中的一部分与简单的"w”相同,正如我前面所说,如果文件在写入新数据之前存在,它将清除该文件。

我的解决方案是aka,TL;DR version:

代码语言:javascript
复制
$fp=fopen("boot_ip.txt","a");

(我没有像您那样使用完整的表单,但是导入更改是第二个参数a而不是wb)和unlink()的排除;)

那就写你的文章。这应该会将新数据添加到文件的末尾。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18567152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档