我正在制作这个程序,我试图找出如何将数据写入文件的开头而不是结束."a"/ append只写到最后,我怎么能写到开头呢?因为"r +"会这样做但会覆盖以前的数据.
$datab = fopen('database.txt', "r+");
Run Code Online (Sandbox Code Playgroud)
这是我的整个文件:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Facebook v0.1</title>
<style type="text/css">
#bod{
margin:0 auto;
width:800px;
border:solid 2px black;
}
</style>
</head>
<body>
<div id="bod">
<?php
$fname = $_REQUEST['fname'];
$lname = $_REQUEST['lname'];
$comment = $_REQUEST['comment'];
$datab = $_REQUEST['datab'];
$gfile = $_REQUEST['gfile'];
print <<<form
<table border="2" style="margin:0 auto;">
<td>
<form method="post" action="">
First Name :
<input type ="text"
name="fname"
value="">
<br>
Last Name :
<input type ="text"
name="lname"
value="">
<br>
Comment :
<input type ="text"
name="comment"
value="">
<br>
<input type ="submit" value="Submit">
</form>
</td>
</table>
form;
if((!empty($fname)) && (!empty($lname)) && (!empty($comment))){
$form = <<<come
<table border='2' width='300px' style="margin:0 auto;">
<tr>
<td>
<span style="color:blue; font-weight:bold;">
$fname $lname :
</span>
$comment
</td>
</tr>
</table>
come;
$datab = fopen('database.txt', "r+");
fputs($datab, $form);
fclose($datab);
}else if((empty($fname)) && (empty($lname)) && (empty($comment))){
print" please input data";
} // end table
$datab = fopen('database.txt', "r");
while (!feof($datab)){
$gfile = fgets($datab);
print "$gfile";
}// end of while
?>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
Ben*_*pan 54
快速又脏:
<?php
$file_data = "Stuff you want to add\n";
$file_data .= file_get_contents('database.txt');
file_put_contents('database.txt', $file_data);
?>
Run Code Online (Sandbox Code Playgroud)
Jor*_*ing 39
如果您不想将文件的全部内容加载到变量中,可以使用PHP的Streams功能:
function prepend($string, $orig_filename) {
$context = stream_context_create();
$orig_file = fopen($orig_filename, 'r', 1, $context);
$temp_filename = tempnam(sys_get_temp_dir(), 'php_prepend_');
file_put_contents($temp_filename, $string);
file_put_contents($temp_filename, $orig_file, FILE_APPEND);
fclose($orig_file);
unlink($orig_filename);
rename($temp_filename, $orig_filename);
}
Run Code Online (Sandbox Code Playgroud)
这样做是将要添加的字符串写入临时文件,然后将原始文件的内容写入临时文件的末尾(使用流而不是将整个文件复制到变量中),然后删除原始文件并重命名临时文件以替换它.
注意:此代码最初基于Chao Xu现已解散的博客文章.代码已经分歧,但原始帖子可以在Wayback Machine中查看.
小智 5
我认为您可以做的是首先读取文件的内容并将其保存在一个临时变量中,现在将新数据插入到文件的开头,然后再附加临时变量的内容。
$file = file_get_contents($filename); $content = '您的内容' 。$文件; file_put_contents($content);