php - 操作文本文件会在重载时出错吗?

时间:2018-01-12 08:05:05

标签: php fwrite

我有一个javascript网络应用程序,每次从websocket接收一个事件时调用一个php脚本(每秒1到8次,没有特定的间隔)。

我想将此信息(json)保存到文本文件中,以便能够将其用于以后的目的。

<?php
$file = '../backtests/' . $_POST['name'] . '.txt';

if (!file_exists($file)) {
    $to_add = '[' . $_POST['_data'] . ']';
}
else {
 $to_add = ',' . $_POST['_data'] . ']'; 
}

$fh = fopen($file, 'a') or die("can't open file");

$stat = fstat($fh);
ftruncate($fh, $stat['size']-1);
fwrite($fh, $to_add);
fclose($fh); 

?>

好的问题是,在开始它正在工作时,但是在文件获得40-50 kb的文本之后,它会被破坏,并且php将开始写入文件的错误部分,因此破坏它

我不确定是什么导致这种情况,但我想这是因为文件正在增长而且php需要花费越来越多的时间来编辑它?

我可以使用哪种其他解决方案?

谢谢。

1 个答案:

答案 0 :(得分:0)

问题是,您的本地服务器可能同时运行多个PHP脚本,覆盖彼此的数据。

您必须使用自定义锁定机制 - 复杂或本地数据库,它会处理这些问题。试试SqliteRedis;它比看起来容易。