2014-05-11 45 views
0

写我有一些问题的fopen的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个用户同时在这个文本文件中插入一个条目或帖子,这是可能的还是可以给我一些错误?或者我需要使用群集,直到保存每个帖子,当某些用户想要在文件中同时更改某些内容时,这是最好的方法,以避免给我带来麻烦。

回答

1

有没有办法自动预先考虑文件。因此,最好将现有内容存储在临时文件中,然后将其插入文件中。

$fp=fopen("text.dat","w"); 
fwrite($fp,"Hello 1"."\n".fread($fp)); 
fclose($fp); 

这将被输出为:

Hello 3 
Hello 2 
Hello 1 

但是就锁被认为是,我不认为这是可能的,还是我不回答这个合适的人。

0
  1. 当您写入文件时,它总是会在最后附加。有没有变通办法,这我知道,但为了实现你想要的(这是显示以相反的顺序行)可以读取行到一个数组中,并显示以相反的顺序排列。
  2. 至于锁定,只有一个进程可以持有锁到一个文件,所以你真的没有做任何事情因为如果两个用户试图在同一时间更新同一文件 - 其中只有一个会成功 - 这实际上会产生一个不同的问题(其中一个用户将失去她的职位)。为了解决这个问题,在保存用户的编辑之前,您应该向用户发送帖子的原始副本和用户提交的新版本 - 检查是否更新了原始版本。如果它不是最新的,这意味着另一个用户在同一时间改变了它。 “用户友好”的行为是向用户返回一个错误,说他的版本不是最新的,但也包括他的编辑 - 这样他就不必从头开始重新编写所有的东西。
0

对于您需要数据库,这更适合于多用户的东西和整理,

或者使用一个子目录,并在其自己的文件创建的每一个消息,有做了一个文件名可以排序的时间戳:yyyymmddhhmmss。但是,你需要防止目录缓存。

由于每个人都有权力固执/削减优势:请参阅file_get_contents加载所有内容,并file_put_contents