Странности при записи в файл

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
Странности при записи в файл

Моя программа выполняет очень много одинаковых операций.
Я записываю номер выполненной операции в специальный файл status.txt (там только одно целое число). Это делается для того, чтобы если срабатывает time_limit или обрыв соединения, можно было продолжать дальше.

Так вот, когда я во время работы нажимаю кнопку стоп на браузере, в этот файл почему-то записывается пустая строка, проще говоря, файл обнуляется.

Почему так?
Я нигде не записываю никаких строк, только целые числа.
Уже пробовал и fflush и clearstatcache, но не помогло :(
 

Nirva

Dmitry Polyakov
предлагаю воспользоваться сессиями+куками - статус ведь пишется для клиента? тогда ничего страшного при разрыве связи не произойдет.
 

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
Спасибо, вы мне очень помогли!
И все же, почему так происходит???????????
 

netdog

net @
потому что файл открывается и не успевает дописать инфу т.к. ты останавливаешь скрипт.
 

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
Запись происходит таким образом:
1: $fp = fopen(...
2: fwrite($fp, ...
3: fflush($fp);
4: fclose($fp, ...

Мне кажется, маловероятно, что мне всегда удается остановить скрипт между строчками 2 и 3
 

corda

Новичок
Делай запись во временный файл, а когда закончишь переименовывай или копируй в рабочий. (rename, copy)
 

IntenT

SkyDiver
2 corda
А чем временный файл отличается от не временного???
 

corda

Новичок
Ничем. Просто рабочий файл запарываться не будет.
 

IntenT

SkyDiver
2 corda
Так ведь идея втом, чтоб создавать файл на случай обрыва связи или чего-то еще, когда скрипт до конца не выполнится. ТОгда временный файл тоже останется пустым
 

corda

Новичок
Originally posted by IntenT
ТОгда временный файл тоже останется пустым
Не тоже, а только. Конечно, это не решит проблему обрыва записи, но позволит не терять данные, которые до этого были.
 
Сверху