|
|
|
Почему пример со счётчиком годен только для примера
А вот почему. Скачиваю я пример, устанавливаю на localhost - всё классно. Жму на рефреш, вижу увеличивающийся номерок, радуюсь. Должен отдельно отметить, что я держу открытыми два браузера - IE и Оперу, чтобы смотреть на вид сайта "с двух точек зрения".
Делаю в них одновременно рефреш и - опаньки:[gif_template: write error] [unlink 'c:/home/bougakov.com/public_html/tmp.gif' failed: No such file or directory(#2)] видно один процесс опередил другой и последнему не досталось файла tmp.gif - его убили долей секунды раньше. Я сильно обижаюсь и устраиваю скрипту крэш-тест - делаю две ссылающиеся друг на друга страницы, a la Робин Гуд и Монах Тук:
counter.parser:^macro[counter_GIF]
<p><a href="counter2.parser?rand=^random[3000]">
Counter2</a> и counter2.parser:^macro[counter_GIF]
<p><a href="counter.parser?rand=^random[3000]">
Counter</a> и натравливаю на них оффлайн-браузер с опциями start downloading again when finished и upload both good and bad files (влом было писать что-то своё, да и MSVC++ вис, собака, так что пришлось брать первый подручный инструмент). Пока он работает, пытаюсь браузером обратиться к странице http://localhost/counter.parser. Так вот, счётчик я вижу раз на десять попыток - всё остальное ерроры. А лог парсера пухнет от сообщений типа:[21/Jun/2001 23:36:08] c:/home/bougakov.com/public_html/counter2.parser:
unlink 'c:/home/bougakov.com/public_html/tmp1.gif' failed: Permission denied(#13)
[21/Jun/2001 23:36:08] c:/home/bougakov.com/public_html/counter2.parser:
unlink 'c:/home/bougakov.com/public_html/tmp1.gif' failed: Permission denied(#13)
[21/Jun/2001 23:36:08] c:/home/bougakov.com/public_html/counter2.parser:
unlink 'c:/home/bougakov.com/public_html/tmp.gif' failed: No such file or directory(#2)
[21/Jun/2001 23:36:08] c:/home/bougakov.com/public_html/counter2.parser:
unlink 'c:/home/bougakov.com/public_html/tmp.gif' failed: No such file or directory(#2)
[21/Jun/2001 23:36:08] c:/home/bougakov.com/public_html/counter2.parser:
unlink 'c:/home/bougakov.com/public_html/tmp1.gif' failed: No such file or directory(#2)
[21/Jun/2001 23:36:08] c:/home/bougakov.com/public_html/counter2.parser:
unlink 'c:/home/bougakov.com/public_html/tmp.gif' failed: No such file or directory(#2) А затем я вспомнил, что в парсере не реализован flock... Я сообразил, что творится у меня на диске ежели эта милая программуля много раз успела подраться за право записи в несчастный временный гифчик.. а у меня на этом диске не NTFS а FAT.. Но, слава богу, всё OK.
Вывод - все гифы нужно называть с использованием случайного числа, типа tmp1^rand[1000000].gif, чтобы предыдущий процесс не стёр временный файл, пока он ещё нужен следующиему и <u>нужно таки сделать лок открытых файлов</u>, поскольку проблема множества обращений к *.count файлам не снимается.
Ой, чую я, придётся выкладывать провайдеру тридцатник за установку MySQL - не обойтись без неё.
|