Автор Тема: 3 в одном  (Прочитано 2114 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн gerra

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 4
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
3 в одном
« : 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);
?>

Оффлайн Oak

  • Дерево
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1481
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
3 в одном
« Ответ #1 : 26 Февраля 2002, 20:04:36 »
Вообщето для этого лучше на других файлах работать
record.txt
record.txt.2
record.txt.3

а уже потом в конце результат поместить в первый путем RENAME
[основной броузер - SeaMonkey] Netscape Communicator 4 - is the best :) // see sources

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28