Php 使用SplFileObject对单个文件进行1000次写入(附加)
“receiver.php”文件每秒接收±1000个Ajax post请求,其中包含Php 使用SplFileObject对单个文件进行1000次写入(附加),php,performance,file,csv,splfileobject,Php,Performance,File,Csv,Splfileobject,“receiver.php”文件每秒接收±1000个Ajax post请求,其中包含$array数据,该数据使用以下代码写入文件.csv: $file = new SplFileObject( __DIR__ . 'file.csv', 'a' ); $file->fputcsv( $array, "|", "'" ); $file = null; 问题: 是否将每个请求数据正确附加到.csv文件中?或者,如果某些请求在写入时重合,那么这些请求数据将因为“文件锁定”而丢失 如果在每秒10
$array
数据,该数据使用以下代码写入文件.csv:
$file = new SplFileObject( __DIR__ . 'file.csv', 'a' );
$file->fputcsv( $array, "|", "'" );
$file = null;
问题:
总的来说-我只关心在这种情况下是否会有数据丢失?Php默认情况下不会锁定文件[如果我没有弄错的话]您可以使用Phpflock()函数锁定文件 文件锁定将使进程等待每个锁“释放”,然后再对其启动另一个操作 但是,如果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多个请求的速度似乎已经接近其可行性。我建议对传入的数据使用查询系统,并将文件的更新与传入的请求分离