使用系统调用在php中写入和读取文件好吗?

使用系统调用在php中写入和读取文件好吗?,php,Php,我需要保留一个20k到30k的文件寄存器,使用一个简单的键:每行值。 我需要将它保存在一个文件中,因为其他实例也将使用它。 然后我需要找到一个特殊的键来获取它的值,并在文件中写入一个key:value。 我想知道以下哪种方法更快/更好或被认为是好的实践 为了写入文件,我知道三种方法: 第一: 第二个或带有文件内容的 file_put_contents('myfile.txt','key:value',FILE_APPEND); $filename = 'info.txt'; $contents

我需要保留一个20k到30k的文件寄存器,使用一个简单的键:每行值。 我需要将它保存在一个文件中,因为其他实例也将使用它。 然后我需要找到一个特殊的键来获取它的值,并在文件中写入一个key:value。 我想知道以下哪种方法更快/更好或被认为是好的实践

为了写入文件,我知道三种方法: 第一:

第二个或带有文件内容的

file_put_contents('myfile.txt','key:value',FILE_APPEND);
$filename = 'info.txt';
$contents = file_get_contents($filename);
foreach($contents as $line) {
$pos = strpos($line, $key);
}
第三,使用系统调用

exec("echo key:value >> myfile.txt");
此外,为了读取文件并查找行,a可以执行以下操作: 使用文件获取内容

file_put_contents('myfile.txt','key:value',FILE_APPEND);
$filename = 'info.txt';
$contents = file_get_contents($filename);
foreach($contents as $line) {
$pos = strpos($line, $key);
}
使用文件

$filename = 'info.txt';
$contents = file($filename);
foreach($contents as $line) {
$pos = strpos($line, $key);
}
并通过系统调用:

exec("grep $key | wc -l",$result);

我想你已经考虑过使用数据库了吧?因为否则你就是在重新发明轮子。数据库具有快速查找和行级锁定的所有优点

如果你正在使用一个文件,你必须自己构建它

我强烈建议切换到某种数据库


顺便说一句,您没有提到是替换值还是只是附加到文件。

坚持使用php函数。这样你的代码就可以移植到其他操作系统上。同样,由于它的key:value,你基本上可以搜索和删除它。如果您需要导出,CSV导出将能够使其可移植。当然应该考虑DB解决方案。所有当前的webapp(nodejs、ruby等)都可以读取DB,并且从DB读取的内容都是ms。这应该是一个评论,而不是一个答案,因为它没有回答所问的问题。亲爱的马克,谢谢你的评论。第一:如果密钥存在,它将被替换为新的时间戳,如果不存在,它将追加。第二:在我看来,如果我要使用一个表db。。。使用文件也是一样的,因为我不做关系查询,而且应该更快。请告诉我你对此有何看法。使用数据库代替文件有什么好的/技术上的原因吗?并非所有数据库都是关系数据库:-)以NoSQL为例。如果您正在寻找来自不同进程的并发读/写操作,那么可以使用数据库。这里有很多关于“数据库vs文件”的问题。例如: