![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| semnt |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 4.11.2005 Репутация: 1 Всего: 1 |
Такой вопрос....
Вот два скрипта: 1.php
2.php
Запускаем первый скрипт. Первый скрипт открывает файл, ставит на него блокировку и в течении 10 секунд записывает в файлик 10 символов (по символу в секунду). Затем он снимает блок и закрывает файл. Сразу же после запуска первого скрипта запускаем второй (так чтобы успеть в эти 10 секунд работы первого скрипта). Второй скрипт открывает файл и пытается поставить блокировку. Уже существующий к тому времени блок не даёт это сделать. Скрипт ожидает, пока этот блок не будет снят. После этого скрипт пытается прочитать из файлика 10 символов и вывести их на страницу. И вроде всё правильно, но если реально сымитировать два параллельных запроса flock($f,2) - то желаемого эффекта мы не получаем - второй скрипт действительно ожидает снятия уже существующего блока, но после не выводит 10 единиц....( |
||||
|
|||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
Ты бы блокировку через константы указывал бы... ПРоще было бы.
Ну и потом, зачем тебе блок при чтении, если заранее известно, что в файле не так уж и много инфы. |
|||
|
||||
| semnt |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 4.11.2005 Репутация: 1 Всего: 1 |
Mal Hack, пример был в общем случае... Предполагается, конечно, что файл будет намного больше чем 10 байт.
Я разобрался в чём ошибка. Если интересно - могу написать. |
|||
|
||||
| Mal Hack |
|
||||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
Да, конечно.
Так бы сразу |
||||
|
|||||
| semnt |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 4.11.2005 Репутация: 1 Всего: 1 |
А дело всё было вот в чём.
1) Кусочек кода из скрипта 1.php
Что происходит. Мы осуществляли запись в файл 1.txt, а реальная запись на носитель происходит именно в момент закрытия файла, то есть операции fclose($f); Получается что мы сначала сняли блок flock($f,3); а уже только потом реально сохранили данные на носитель. Второй же скрипт, как только получил право на чтение файла 1.txt сразу же начал читать его, в то время как первый скрипт ещё не успел записать его содержимое на носитель. Значит вообще не нужно снимать блок в первом скрипте - просто закрывать файл сразу. А блок сниметься автоматически функцией fclose($f), но уже после записи на носитель. 2) Кусочек кода из скрипта 2.php
Вообще говоря это неправильно. Если предполагаем чтение из файла, то и блок нужно ставить не на запись, а на чтение. То есть flock($f,1); И вот что получилось: 1.php
2.php
Работает стабильно Это сообщение отредактировал(а) semnt - 6.11.2005, 00:23 |
||||||||
|
|||||||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |