Консультация № 49939
23.07.2006, 13:16
0.00 руб.
0 4 2
Доброго времени суток..
я меня трабл с определениии блокировки доступа к файлу, а именно::

посе блокировки доступа
flock($id_res2, LOCK_EX);

как можно это определить??

if($id_res2 = fopen($this->rss_tmp_projects_file,‘w+‘))
echo ‘ok‘;

не работает, т.к. fopen всегда возвращает id ресурса в данном случае

Подскажите пожалуйста..

Обсуждение

Неизвестный
23.07.2006, 13:34
общий
это ответ
Здравствуйте, Keane!

Точно не уверен, но попробуйте заблокировать файл с флагом LOCK_NB. Если заблокировать не удалось, возращаемым значением будет FALSE:

Приложение:
$id=fopen($this->rss_tmp_projects_file,‘r‘);if(flock($id,LOCK_EX | LOCK_NB)){ flock($id,LOCK_UN); echo(‘Файл не заблокирован‘);}else{ echo(‘Файл заблокирован‘);}
Неизвестный
23.07.2006, 13:46
общий
Не то, чтобы я сильно возражал, но ставить оценку до проверки ответа не очень-то логично.PS. Кстати, если ответ сработает, то в конце приведенного кода нужно добавить fclose($id);
Неизвестный
23.07.2006, 13:52
общий
из приведенного кода вижу, что он должен сработать.. вот поэтому и поставил сразу оценку..
Неизвестный
27.07.2006, 02:22
общий
это ответ
Здравствуйте, Keane!
Посмотрите здесь функцию read_file();
http://www.compdoc.ru/internet/php/php_blocking/

Приложение:
<?function read_file($path){if(!is_file($path)) {return false; }elseif(!filesize($path)) {return array(); }elseif($array=file($path)) {return $array; }else { while(!$array=file($path)){sleep(1);} return $array; }}……// проверяем заблокирован ли файл на чтение,// если заблокирован, назначаем цикл с остановкой,// пока блокировка не будет снята, после снятия блокировки,// читаем данные из файла файла-базы$f = read_file ("file_base.dat", "r");// здесь идет текст скрипта// открываем файл-базу на запись$fp = @fopen ("file_base.dat", "w"); // здесь находится 1 пользователь// блокируем файл-базу на чтение@flock ($fp, LOCK_EX)// записываем в файл-базу данные из выше// прочитанного file_base.dat - переменная $f// и добавляем еще одну строку с данными нового пользователя// снимаем блокировку@flock ($fp, LOCK_UN)// закрываем файл-базу@fclose ($fp);……?>
Форма ответа