|
|
|
|
|
для: Владимир55
(06.11.2008 в 13:35)
| | Я если честно использовал этот скрипт всего пару раз и давно. Поэтому не задумывался наж этим.))
Просто так же как и Вы "содрал" с софтайма =)))
А насчет отпирания может Вы проглядели? )
Файл должен отпираться той же функцией flock со вторым параметром LOCK_UN | |
|
|
|
|
автор: ч (06.11.2008 в 14:21) |
|
|
для: Владимир55
(06.11.2008 в 13:35)
| | история умалчивает о том чего ждал автор кода )
например у меня на денвере под виндоввс вообще странные результаты показывает например такой тест:
три файла иммитируют два обращения к файлу и немного запутанно register_shutdown_function()
test.php
<?
echo time() .'<hr>';
virtual('test1.php');
$f=fopen('test.txt', "r+t");
if($f) echo 'файл открыт ' . time() .'<hr>';
else die("Невозможно открыть файл");
if ( flock($f, LOCK_EX+LOCK_NB)) echo 'файл заблокирован ' . time() .'<hr>';
else die("Невозможно открыть файл");
?>
<hr>
|
test1.php
<?
function blf() {
$f2=fopen('test.txt', "r+t");
flock($f2, LOCK_EX+LOCK_NB);
sleep(20);
}
register_shutdown_function('blf');
?>
скрипт test1.php отработал запустилась blf()<hr>
|
test.txt
Немогу понять почему результат именно такой
1225970322
--------------------
скрипт test1.php отработал запустилась blf()
------------------------------
файл открыт 1225970322
------------------------------------
файл заблокирован 1225970322
-----------------------------------
Warning: fopen(test.txt): failed to open stream: No such file or directory in ...........l\test1.php on line 3
Warning: flock() expects parameter 1 to be resource, boolean given in ...................l\test1.php on line 4
|
а так закрытие и разблокирование файлов должно происходить автомотически , по завершению работы скрипта | |
|
|
|
|
|
|
|
для: ddhvvn
(06.11.2008 в 13:30)
| | А есть смысл в этом ожидании?
Ведь процессы идут непрерывно, так за ту секунду, что вы его ждете, файл может освободиться, но его могут занять вновь!
Как мне кажется, это излишне. Если файл подвергнуть эксклюзивной блокировке при любом обращении к нему из любого скипта, то очередность образуется сама собой.
Разве не так?
А почему в конце нет разблокирования файла? Разве разблокировка не нужна? | |
|
|
|
|
|
|
|
для: Владимир55
(06.11.2008 в 13:25)
| | >...Чего он ждет?
Когда файл освободится =)
Конечно 1 сек многовато, но это минимальный отрезок времени, который можно задать. | |
|
|
|
|
|
|
|
для: AcidTrash
(06.11.2008 в 13:19)
| | Стало быть в первоисточнике, на который я сослался в первом сообщении, ошибка. А то я подумал, что, может быть, это какая-то хитрость программирования, которую я не знаю...
Скажите, а для чего автор сделал
while(!flock($f, LOCK_EX+LOCK_NB)) sleep(1); // ждём одну секунду
|
Чего он ждет?
И почему нет разблокировки файла? Разве она не нужна? | |
|
|
|
|
|
|
|
для: Владимир55
(06.11.2008 в 13:08)
| | >$count=fread($f,0);
Всегда считал, что второй параметр указывает количество байт, которое нужно прочитать.
У вас же этот параметр 0, т.е. прочитать ноль байт. | |
|
|
|
|
|
|
|
для: ч
(06.11.2008 в 12:45)
| | Код не мой, и чем дольше я в нем копаюсь, тем меньше его понимаю... | |
|
|
|
|
автор: ч (06.11.2008 в 12:45) |
|
|
для: Владимир55
(06.11.2008 в 12:23)
| | мне больше странной показалась строка
>> while(!flock($f, LOCK_EX+LOCK_NB)) sleep(1);
почему sleep(1); ?
fread здесь как-то логичнее т.к. сразу после чтения делается перезапись файла | |
|
|
|
|
|
|
|
для: ч
(06.11.2008 в 12:14)
| | Да, я откорректировал свой вопрос, чтобы выделить его сущность. | |
|
|
|
|
автор: ч (06.11.2008 в 12:14) |
|
|
для: ч
(06.11.2008 в 12:08)
| | код был изменён rкак мне показалось | |
|
|
|
|