За последние 24 часа нас посетили 62097 программистов и 1790 роботов. Сейчас ищут 849 программистов ...

Блокировка файла

Тема в разделе "PHP для новичков", создана пользователем simple, 13 окт 2010.

  1. simple

    simple Активный пользователь

    С нами с:
    17 сен 2010
    Сообщения:
    56
    Симпатии:
    0
    У меня вопрос к знатокам PHP. Скрипт открывает файл, и блокирует его для дальней шей работы с ним, так же для упрощения кода написаны пользовательскии функции, которые тоже работают с этим файлом, например обновляют или дописывают в файл. Вопрос в следующем, ни какой страшной путаницы не произойдет если эти функции при вызове отркывают уже открытый и заблокированный файл, обновляют его и закрывают.
    PHP:
    1.  
    2. .......................
    3. function update($a){
    4.  $f=fopen($fname,'r+t');
    5.  fputs($f,$a);
    6.  fclose($f);
    7. }
    8. $f=fopen($fname,'r+t');
    9. flock($f,LOCK_EX);
    10. ..............................//работа с файлом
    11. update($a);
    12. fflush ($f);  
    13. flock ($f,LOCK_UN);  
    14. fclose ($f);
    15.  
    16.  
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    simple
    а зачем? Оберни в класс и сделай одну общую переменную, с которой они все работают. А закрывалку в деструктор. Она по-сути и не нужна. Скрипт отработал - файл освободится.
     
  3. simple

    simple Активный пользователь

    С нами с:
    17 сен 2010
    Сообщения:
    56
    Симпатии:
    0
    igordata
    Я с ООП плохо дружу, можно пример если не трудно, как это реализовать.
    А мой пример не рабочий будет?

    P.S или если я сделаю дескриптор файла $f глобальной переменной то в функциях можно будет обойтись без fopen?
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    simple
    да хз. Просто не очень понятно зачем его вечно открывать-закрывать, если ты работаешь с одним файлом, так и работай себе спокойно =)

    ничего не мешает тебе застолбить файлик в самом начале и дальше с ним работать http://ru.php.net/manual/en/function.flock.php

    ооп штука простая, если не нагруженная.

    PHP:
    1. <?
    2. class Filer {
    3.   private $file; // обращаться к ним потом так $this->file
    4.  
    5.   // потом тут функи и в них $this->file будет доступен во всех.
    6.  
    7.   function __construct($path) {
    8.     $this->file = fopen($path, "r+"); //fopen кстати возвращает true или false - это полезно может быть
    9.     //дальше копируем из примера по ссылке выше что я сказал
    10.     if (flock($fp, LOCK_EX)) { // do an exclusive lock
    11.       // можно работать
    12.     } else {
    13.       // файл занят кем-то еще. надо валить.
    14.     }
    15.   }
    16.  
    17.   // а дальше уже свои функи-методы рисуешь один в один. Только надо переделать их на работу с $this->file и чтобы не закрывали ничего. просто
    18.   function lalala () {
    19.     fwrite($this->file, "Write something here\n");
    20.   }
    21.  
    22.   // в деструкторе можно отпустить все
    23.    function __destruct() {
    24.      flock($this->file, LOCK_UN);
    25.      fclose($this->file);
    26.      // и так далее
    27.   }
    28. }
     
  5. simple

    simple Активный пользователь

    С нами с:
    17 сен 2010
    Сообщения:
    56
    Симпатии:
    0
    igordata
    Спасибо огромное, буду разбираться.