将代码添加到.txt文件而不覆盖它

时间:2014-03-19 02:59:27

标签: php

<?php

$fn = "content.txt";



if (isset($_POST['content'])){

    $content = stripslashes($_POST['content']);

    $fp = fopen($fn,"w") or die ("Error opening file in write mode!");

    $old_content = file_get_contents($fn);

    fputs($fp, $content."\n".$old_content);


    fclose($fp) or die ("Error closing file!");

}

?>



<form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="post">

    <textarea rows="25" cols="40" name="content"></textarea>

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

</form>

所以这是我的PHP代码。但它会删除以前写入的数据。如何将新数据添加到新行中?保留最后的数据。 谢谢!

<?php

$fn = "content.txt";



if (isset($_POST['content'])){

    $content = stripslashes($_POST['content']);

    $fp = fopen($fn,"a+") or die ("Error opening file in write mode!");

    fputs($fp,$content);


    fclose($fp) or die ("Error closing file!");

}

?>



<form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="post">

    <textarea rows="25" cols="40" name="content"></textarea>

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

</form>

现在它根本不起作用

5 个答案:

答案 0 :(得分:3)

来自fopen手册:

  

'a'仅供写作;将文件指针放在。的末尾   文件。如果该文件不存在,请尝试创建它。

更改

 $fp = fopen($fn,"w") or die ("Error opening file in write mode!");

 $fp = fopen($fn,"a") or die ("Error opening file in write mode!");

答案 1 :(得分:2)

您可以使用aa+模式代替w,这样您就可以:

$fp = fopen($fn,"a") or die ("Error opening file in write mode!");

而不是:

$fp = fopen($fn,"w") or die ("Error opening file in write mode!");

来自 manual 关于fopen mode

  

&#39; w&#39;:仅供写作;将文件指针放在开头   该文件并将文件截断为零长度。如果文件没有   存在,试图创造它。

     

&#39; a&#39;:仅供写作;将文件指针放在。的末尾   文件。如果该文件不存在,请尝试创建它。

     

&#39; a +&#39;:开放阅读和写作;将文件指针放在最后   的文件。如果该文件不存在,请尝试创建它。

答案 2 :(得分:1)

将您的通话更改为fopen以使用追加模式而不是写:

$fp = fopen($fn,"a") or die ("Error opening file in write mode!");

来源:http://www.php.net/manual/en/function.fopen.php

答案 3 :(得分:1)

观察 - 因为你已经使用了file_get_contents我想提一下写作的反向函数:

file_put_contents($fn, $content, FILE_APPEND);

这样你甚至不需要打开文本文件并将其加载到内存中。

也有助于记录。

答案 4 :(得分:1)

  

“现在它根本不起作用”

^ - «根据您的编辑,这将在新行上写下每个条目:

我改变了:

$content = stripslashes($_POST['content']);

$content = stripslashes($_POST['content'] . "\n");

使用\n将在新行上包含所有新条目。

PHP

<?php

$fn = "content.txt";

if (isset($_POST['content'])){

    $content = stripslashes($_POST['content'] . "\n");

    $fp = fopen($fn,"a+") or die ("Error opening file in write mode!");

    fputs($fp,$content);


    fclose($fp) or die ("Error closing file!");

}

?>

<form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="post">

    <textarea rows="25" cols="40" name="content"></textarea>

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

</form>

写入档案:

A1
A2
A3
A4
A5
你好世界!!
测试123

一次写入一个文件:
A1,A2,A3,A4,A5

如图所示输入textarea框并写入文件,如下所示:

Hello world !!
测试123


如果您希望从顶部开始输入数据,请使用:

<?php

if (isset($_POST['content'])){

    $content = stripslashes($_POST['content'] . "\n");

    $file_data = $content;
    $file_data .= file_get_contents('content.txt');
    file_put_contents('content.txt', $file_data);

}

?>

<form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="post">

    <textarea rows="25" cols="40" name="content"></textarea>

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

</form>