Forum Webscript.Ru
		Программирование => PHP => Тема начата: gerra от 26 Февраля 2002, 19:42:23
		
			
			- 
				Сделал скрипт, который записывает и сортирует текстовый файл рекордов. Для того, чтобы данные не испортились при одновременном доступе, я его блокирую. Но вот какая штука получается. По ходу выполнения скрипта сам файл приходится открывать несколько раз (с разными вариантами записи и перезаписи) и поэтому сама блокировка получается не эффективной. Подскажите, как перезаписать отсортированные данные в тот же файл, одновременно стерев старые данные. (или как сделать мой скрипт, открывая файл один раз).
 Сам скрипт: (производит запись и сортировку таблицы рекордов на 20 игроков)
 
 $date = date("d m Y");
 $mes = "$name, $score, $email, $date\\n";
 $fa = "record.txt";
 $cartFile1 = fopen($fa,"a+");
 flock($cartFile1,2);
 fputs($cartFile1,$mes);
 fclose($cartFile1);
 
 $cartFile = fopen($fa,"a+");
 flock($cartFile,2);
 while($line = @fgets($cartFile, 1024)) {
 $list = f.$i;
 $$list = explode(",",($line));
 $i++;
 }
 
 function cmp_debt($a, $b)
 {
 if ($a[1]== $b[1]) return 0;
 return ($b[1]  > $a[1]) ? 1 : -1;
 }
 $buddy_debts = array($f,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$f10,$f11,$f12,$f13,$f14,$f15,$f16,$f17,$f18,$f19,$f20);
 usort($buddy_debts, \'cmp_debt\');
 foreach ($buddy_debts as $buddy_debt) {
 $fileN = $fileN. implode(",", $buddy_debt);
 }
 
 $cartFile = fopen($fa,"w+");
 flock($cartFile,2);
 fputs($cartFile,$fileN);
 fclose($cartFile);
 
 $cartFile = @fopen($fa,"r+");
 flock($cartFile,2);
 while (true) {
 $last_addr = $addr;
 $addr = ftell($cartFile);
 if (!@fgets($cartFile, 1024))
 break;
 }
 ftruncate ($cartFile, $last_addr);
 fclose($cartFile);
 ?>
- 
				Вообщето для этого лучше на других файлах работать
 record.txt
 record.txt.2
 record.txt.3
 
 а уже потом в конце результат поместить в первый путем RENAME