文本未附加到文件

时间:2017-10-02 05:37:54

标签: php

每当我尝试向其添加更多文本时,文本文件似乎都会被覆盖。这是代码:

<?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

?>

3 个答案:

答案 0 :(得分:1)

OP说“文本文件似乎被覆盖”意味着内容被写入文件,因此这不是与权限相关的问题。

尝试使用

打开文件
$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()及其朋友混在一起。

file_put_contents()

更容易
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();
}