每当我尝试向其添加更多文本时,文本文件似乎都会被覆盖。这是代码:
<?php
header('Location: http://optifine.net/');
$txt = "data.txt";
$fh = fopen($txt, 'w+');
if (isset($_POST['field1']) && isset($_POST['field2'])) { // check if both fields are set
$txt=$_POST['field1'].' - '.$_POST['field2'];
file_put_contents('data.txt',$txt."\n",FILE_APPEND); // log to data.txt
exit();
}
fwrite($fh,$txt); // Write information to the file
fclose($fh); // Close the file
?>
答案 0 :(得分:1)
尝试使用
打开文件$fh = fopen($txt, 'a+');
而不是你的说法;
$fh = fopen($txt, 'w+');
请参阅http://php.net/manual/en/function.fopen.php
上的PHP文档关于模式的解释。
答案 1 :(得分:0)
根据 file_put_contents
,您只需要
file_put_contents('data.txt',$txt."\n",FILE_APPEND);
使用file_put_contents
附加的内容被fopen
覆盖。你应该使用它们中的任何一个,而不是两者。
此外,您正在使用fopen
w+
,这实际上会截断文件
开放阅读和写作;将文件指针放在开头 该文件和将文件截断为零长度。如果文件没有 存在,试图创造它。
答案 2 :(得分:0)
您的代码显示了如何不编写代码。它将fopen()
/ fwrite()
/ fclose()
与file_put_contents()
混合在一起。它无法理解变量$txt
的目的;它是一个文件名,然后是一些写入文件的内容。它会打开一个文件然后忘记它;在if
块中,脚本退出而不关心打开的文件。
没有理由将file_put_contents()
与fwrite()
及其朋友混在一起。
header('Location: http://optifine.net/');
$filename = 'data.txt';
if (isset($_POST['field1']) && isset($_POST['field2'])) {
$text = $_POST['field1'].' - '.$_POST['field2'];
file_put_contents($filename, $text, FILE_APPEND);
exit();
}
在幕后,file_put_contents()
打开文件(fopen()
),将数据写入其中(fwrite()
)然后将其关闭(fclose()
)。让我们尝试做同样的事情:
header('Location: http://optifine.net/');
$filename = 'data.txt';
if (isset($_POST['field1']) && isset($_POST['field2'])) {
$text = $_POST['field1'].' - '.$_POST['field2'];
// Do what file_put_contents($filename, $text, FILE_APPEND) does
$fh = fopen($filename, 'a');
if ($fh) {
fwrite($fh, $text);
fclose($fh);
}
exit();
}