diff --git a/scripts/generate.php b/scripts/generate.php index c51fc69f..5312c285 100644 --- a/scripts/generate.php +++ b/scripts/generate.php @@ -67,11 +67,29 @@ function dump_for_ss_server($exist_txs) { $address[] = $_tx['address']; } $str = implode("\n", $address)."\n"; + LOGI("try dump ".count($address)." address to ss_server_file"); - LOGI("dump ".count($address)." address to ss_server_file"); - if (file_put_contents($_CFG['ss_server_file'], $str) == false) { - LOGI("write file fail: {$_CFG['ss_server_file']}"); + $exist = file_exists($_CFG['ss_server_file']); + $fp = fopen($_CFG['ss_server_file'], $exist ? "r+" : "w"); + if (!$fp) { + LOGI("write file failure: {$_CFG['ss_server_file']}"); + return; + } + + // use flock when write file + for ($i = 0; $i < 3; $i++) { // try 3 times if need + if (!flock($fp, LOCK_EX | LOCK_NB)) { + sleep(3);continue; + } + ftruncate($fp, 0); + fwrite($fp, $str); + fflush($fp); + flock($fp, LOCK_UN); + + LOGI("write file success: {$_CFG['ss_server_file']}"); + break; } + fclose($fp); }