使用 SplFileObject 对单个文件进行 1000 次写入(追加)



"receiver.php">文件每秒接收±1000个Ajax发布请求,其中包含使用以下代码写入文件$array数据.csv

$file = new SplFileObject( __DIR__ . 'file.csv', 'a' );
$file->fputcsv( $array, "|", "'" );
$file = null;

问题:

  1. 将每个请求数据正确附加到文件中.csv?或者,如果某些请求在写入时重合,那么这些请求数据将由于"文件锁定"而丢失?

  2. 如果同时这
  3. 1000 个每秒请求写入文件.csv - cron 服务启动的其他进程将介入并开始读取该文件.csv,会发生什么?这 1000 个请求是否能够继续将数据附加到文件中.csv或者在 cron 进程将使用file 时.csv- 这 1000 个请求将"碰壁"并且数据不会入、丢失?

总的来说 - 我只是对在这种情况下是否会丢失数据感兴趣?

Php 默认情况下不锁定文件[如果我没记错的话]您可以使用 phpflock((函数锁定文件。

关于 Flock(( 的文档

文件锁定将使进程等待每个锁被"释放",然后再对其启动另一个操作。

但是,如果在释放文件的锁之前 http 请求超时,则会出现问题。但是,您可以通过设置以下环境配置来防止这种情况发生。

set_time_limit(0); //sets timeout for runnin the script to unlimited.
ignore_user_abort(); //prevents user from aborting the request once started

然而,每秒 1000+ 个请求似乎这种方法已接近可行性。我建议对传入数据使用队列系统,并将文件的更新与传入请求分离。

最新更新