- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Зачем быть уникальным в мире, где все можно скопировать
Почему так важна уникальность текста и как она влияет на SEO
Ingate Organic
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Помогите разобраться с блокировками файлов.
Вообщим несколько процессов работают с одним файлом суть работы такова: сначала читаем, потом работаем с прочитанным - меняем его и записываем обратно. Также требуется актуальность информации в файле. Т.е. если первый процесс обновил файл, то второй должен получить именно обновленный вариант.
Добиться этого я не могу. Пробую пока на локалке (WIN 7; файловая система NTFS). Запускается 4-ре процесса и обязательно сколько не то да не выполнится (вылетает ошибка потому что процесс получает из файла не то что надо).
Вот пример функции.
Вот приблизительно так. Ставлю исключительную блокировку и как я понимаю после этого не кто не должен лапать файл (читать или писать) пока с него не снимется эта исключительная блокировка.
Чего делаю не так и как поправить? Может дело в Windows?
Добиться этого я не могу. Пробую пока на локалке (WIN 7; файловая система NTFS)
Это невероятно неправильное решение для отладки чего-бы то нибыло, связанного с PHP. А уж для работы с файлами это былинный провал, батенька.
Может дело в Windows?
Дело в файловой системе.
Дело в файловой системе.
Из доки
Под NFS подразумевается NTFS, что ли? Я думал это что то другое.
А обойти это можно как не то, заставить работать на винде?
работать на винде?
Говорю глаголами: на винде не нужно работать, 99% из того что у вас на винде сработает не будет больше нигде работать так, как вы задумали. Вы чего вообще? Какая винда, зачем? :)
Tarry, денвер, гули
bearman добавил 03.06.2010 в 23:57
http://ru2.php.net/flock
и как надо той функцией пользоваться батенька?
правильно, вот так (код из примера сразу после доки)
while (!flock($file_handle, LOCK_EX | LOCK_NB)) {
//Lock not acquired, try again in:
usleep(round(rand(0, 100)*1000)) //0-100 miliseconds
}
Говорю глаголами: на винде не нужно работать, 99% из того что у вас на винде сработает не будет больше нигде работать так, как вы задумали.
В данном случае как раз наоборот, на Win не будет работать то, что сработает на UNIX-like системах.
Ставлю исключительную блокировку и как я понимаю после этого не кто не должен лапать файл (читать или писать) пока с него не снимется эта исключительная блокировка.
Для Win это действие не имеет смысла. там иные механизмы. Чтобы работало на винде, вместо блокировок используйте проверку на занятость файла (если она сообще здесь имеет смысл.)
пых как был потомком перла, так и перенес в себя все особенности и ограничения.
Вот на php.net в коментах есть вариант с созданием временного файла.
Вроде как работает все пишется без как положено. Но меня смущает вот этот момент
Т.е. выходит, что если файл открылся, то мы его удаляем (TRUE) и идем создавать, а если он не открылся, то опять (TRUE) и идем создавать.
Получается, что если первый процесс создал блокировку, и допустим вышло так, что за ним идет сразу второй процесс, то он снесет эту блокировку и поставит свою, а дальше они оба получат доступ к файлу и писец.
Но вариант вроде нормальный. Я вот подумал, а то если проверять последнее время доступа, и если оно больше скажем (N сек.), то значит какой-то процесс завершился с ошибкой (не снял блокировку).
Ща, попробую. Потом отпишу.