У меня вопрос к знатокам PHP. Скрипт открывает файл, и блокирует его для дальней шей работы с ним, так же для упрощения кода написаны пользовательскии функции, которые тоже работают с этим файлом, например обновляют или дописывают в файл. Вопрос в следующем, ни какой страшной путаницы не произойдет если эти функции при вызове отркывают уже открытый и заблокированный файл, обновляют его и закрывают. PHP: ....................... function update($a){ $f=fopen($fname,'r+t'); fputs($f,$a); fclose($f); } $f=fopen($fname,'r+t'); flock($f,LOCK_EX); ..............................//работа с файлом update($a); fflush ($f); flock ($f,LOCK_UN); fclose ($f);
simple а зачем? Оберни в класс и сделай одну общую переменную, с которой они все работают. А закрывалку в деструктор. Она по-сути и не нужна. Скрипт отработал - файл освободится.
igordata Я с ООП плохо дружу, можно пример если не трудно, как это реализовать. А мой пример не рабочий будет? P.S или если я сделаю дескриптор файла $f глобальной переменной то в функциях можно будет обойтись без fopen?
simple да хз. Просто не очень понятно зачем его вечно открывать-закрывать, если ты работаешь с одним файлом, так и работай себе спокойно =) ничего не мешает тебе застолбить файлик в самом начале и дальше с ним работать http://ru.php.net/manual/en/function.flock.php ооп штука простая, если не нагруженная. PHP: <? class Filer { private $file; // обращаться к ним потом так $this->file // потом тут функи и в них $this->file будет доступен во всех. function __construct($path) { $this->file = fopen($path, "r+"); //fopen кстати возвращает true или false - это полезно может быть //дальше копируем из примера по ссылке выше что я сказал if (flock($fp, LOCK_EX)) { // do an exclusive lock // можно работать } else { // файл занят кем-то еще. надо валить. } } // а дальше уже свои функи-методы рисуешь один в один. Только надо переделать их на работу с $this->file и чтобы не закрывали ничего. просто function lalala () { fwrite($this->file, "Write something here\n"); } // в деструкторе можно отпустить все function __destruct() { flock($this->file, LOCK_UN); fclose($this->file); // и так далее } }