Форум "Web-мастер" (архив)
Технологии web-програмирования
#0 Piter © 04.06.05 19:00:04 - 07.06.05 13:09:37 Счетчик на PHPНаписал простенький счетчик на PHP. Вроде все верно, а иногда сбоит: <?phpВроде пока следишь - нормально работает... А потом оставишь на некоторое время, так в файле счетчика фигня происходит. Строки куда-то ползут не туда, пробелом куча, в общем, что-то не то. Я вот думаю - может это быть из-за множественного доступа к файлу? То есть, предыдущая запись в файл еще не отработала, а тут уже новое выполнение скрипта... Как вообще в PHP с этим борятся?
|
|
А flock() где? |
|
#2 Piter © 04.06.05 19:21:11
А его всегда надо ставить при работе с файлами? |
|
Тебе же блокировка нужна? Или нет? Если нет - можешь не ставить... но результат ты сам видел |
|
#4 Piter © 04.06.05 19:28:25
А если мне нужно дождаться, когда возможно будет писать? while !flock(...) не будет отнимать слишком много процессорного времени? |
|
Ну он же "простенький", вот если бы был "непростенький", тогда бы оно да... |
|
Если ты этим завесишь сервер... вот посмеёмся |
|
#7 Piter © 04.06.05 19:57:01
хм... ты как будто не понимаешь. Если писать на Delphi: while true begin random; end; цикл тоже не "сложный", а толку? Процессор то как его будет исполнять... Ну ладно, с этим вроде все ок, оказывается flock сам блокирует цикл... но вот что интересно, цитата из документации: поскольку flock() требует указателя на файл, вам может понадобиться использовать специальную блокировку файла для предотвращения доступа к файлу, который вы намереваетесь усечь в режиме write (с аргументом "w" или "w+" для fopen()). что делать? Я как видно открываю как раз файл с "W". |
|
>#7 Piter © 04.06.05 18:57:01 > while true do > begin > random; > end; > цикл тоже не "сложный", а толку? Процессор то как его будет > исполнять... А разве многозадачность уже отменили? Странно.... похоже эта инфа проскочила мимо моих ушей... |
|
> поскольку flock() требует указателя на файл, вам может понадобиться > использовать специальную блокировку файла для предотвращения > доступа к файлу, который вы намереваетесь усечь в режиме > write (с аргументом "w" или "w+" для fopen()). На нормальном русском, а не в машинном переводе, это звучит немного иначе... Из-за того, что функции flock() необходим указатель на файл, вам может понадобиться воспользоваться специальным запирающим файлом для того, чтобы ограничить доступ к файлу, который вы намерены очищать путём открытыя его в режиме записи (используя "w" или "w+" в качестве аргумента функции fopen()). Почитай тут Может ещё чего полезного надыбаешь |
|
Тут лучше... |
|
#11 Piter © 05.06.05 00:48:41
#8 Knight © (04.06.05 21:49) разве многозадачность уже отменили? Странно причем здесь многозадачность? Ок, вопрос на засыпку. Берем цикл: while true begin random; end; угадай какова будет загрузка процессора? |
|
>#11 Piter © 04.06.05 23:48:41 Ну во-первых поправляю ещё раз... а то скопировал предыдущий, а делфя меня послала... while true DOИ даже просто while true DO random;Во-вторых... ты сам смотрел? Если проц свободен, то к 100%, если он нужен другой задаче, то загрузка падает и до 50%, и до 20% и даже ниже... Поэтому думаю, что на работающем сервере твоей задаче дадут столько сколько дадут и ни процентом больше По ссылке 10 ходил? |
|
#13 Piter © 05.06.05 22:45:22
#12 Knight © (05.06.05 18:19) Поэтому думаю, что на работающем сервере твоей задаче дадут столько сколько дадут и ни процентом больше да, но например те же хостера считают потраченное ВРЕМЯ ПРОЦЕССОРА... а если процессор не будет занят другими делами - то оно окажется ОЧЕНЬ БОЛЬШИМ... |
|
>#13 Piter © 05.06.05 21:45:22 > - то оно окажется ОЧЕНЬ БОЛЬШИМ... Не уточнишь в течении скольки миллисекунд? |
|
> while !flock(...) не будет отнимать слишком много процессорного > времени? в тело цикла вставляешь sleep(1) |
|
Протормозил, а цикл ведь вообще не нужен. |
|
#17 Piter © 07.06.05 13:09:37
#14 Knight © (05.06.05 23:34) Не уточнишь в течении скольки миллисекунд? в течении всего времени ожидания, когда работа с предыдущим файлом закончится. А если это достаточно часто вызываемый счетчик, то это время, повторюсь, будет ОЧЕНЬ БОЛЬШИМ. |
Тема находится в архиве
Написать ответ |
|
