我正在制作这个程序,我试图找出如何将数据写入文件的开头而不是结束."a"/ append只写到最后,我怎么能写到开头呢?因为"r +"会这样做但会覆盖以前的数据.
$datab = fopen('database.txt', "r+");
这是我的整个文件:
Facebook v0.1 form; if((!empty($fname)) && (!empty($lname)) && (!empty($comment))){ $form = << 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 ?> $fname $lname : $comment
Ben Regenspa.. 54
快速又脏:
我认为没有更好的方法在文件的开头插入数据.您无论如何都必须移动文件中当前包含的所有数据.对于较大的文件,您可能需要逐个读取文件以使其适合内存. (2认同)
Jordan Runni.. 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); }
这样做是将要添加的字符串写入临时文件,然后将原始文件的内容写入临时文件的末尾(使用流而不是将整个文件复制到变量中),然后删除原始文件并重命名临时文件以替换它.
注意:此代码最初基于Chao Xu现已解散的博客文章.代码已经分歧,但原始帖子可以在Wayback Machine中查看.
快速又脏:
如果您不想将文件的全部内容加载到变量中,可以使用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); }
这样做是将要添加的字符串写入临时文件,然后将原始文件的内容写入临时文件的末尾(使用流而不是将整个文件复制到变量中),然后删除原始文件并重命名临时文件以替换它.
注意:此代码最初基于Chao Xu现已解散的博客文章.代码已经分歧,但原始帖子可以在Wayback Machine中查看.