我对fopen有一些疑问
当我去添加新条目时,第一个问题总是放在文件末尾而没有启动文件,例如:
$fp=fopen("text.dat","a");
fputs($fp,"Hello 1"."\n");
fclose($fp);
此文件中的结果始终显示在最后:
Hello 1
Hello 2
Hello 3
并且没有我想要的,将新评论插入第一个地方以显示为:
Hello 3
Hello 2
Hello 1 ( The most old entry )
另一方面我的第二个问题,例如,如果我有10个用户并且这10个用户同时在此文本文件中插入一个条目或帖子,那么可能或者可以给我一些错误?或者我需要使用flock直到保存每个帖子,这是当一些用户想要同时在文件中更改内容时没有给我带来问题的最佳方法?
答案 0 :(得分:1)
无法自动添加文件。因此,最好将现有内容存储在临时文件中,然后将其插入文件中。
$fp=fopen("text.dat","w");
fwrite($fp,"Hello 1"."\n".fread($fp));
fclose($fp);
这将输出为:
Hello 3
Hello 2
Hello 1
但就锁定而言,我认为这是不可能的,或者不适合回答这个问题。
答案 1 :(得分:0)
答案 2 :(得分:0)
为此你需要一个数据库,它更适合多用户事物和排序,
或者使用子目录并在其自己的文件中创建每个消息,文件名由可排序的时间戳组成:yyyymmddhhmmss
。但是,您需要阻止目录缓存。
由于每个人都有权顽固/削减优势:请file_get_contents加载所有内容,然后file_put_contents
。