Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > хмл, блокировка при записи?


Автор: dstorm81 13.6.2007, 10:14
собствеенно это реализовано в самом пхп?
или это надо делать самому, и если самому то как?
мб тема тупая, но все же самумневался что-то

Автор: PARROT 13.6.2007, 10:37
dstorm81, попробуйте еще раз объяснить на русском языке, по пунктам, что Вам нужно сделать. 

Автор: dstorm81 13.6.2007, 12:01
smile после праздника всё-же..

при записи в файлы (например:fopen)  есть lock unlock - блокировщики, делается для предотвращения одновременной записи, до сюда понятно понятно?
вот, а теперь xml, в xml можно добавлять/удалять/модифицировать узлы и перезаписывать файл используя DOM (php5).
Cобственно вопрос, не случится-ли так, что одновременно два процесса захотят добавить запись, и одна из них потеряетсо...

Автор: BuShaRt 13.6.2007, 12:18
http://www.php.su/functions/?flock

Автор: dstorm81 13.6.2007, 12:39
2BuShaRt  ну и как это к xml и DOM прикрутить?

Автор: BuShaRt 13.6.2007, 12:43
dstorm81, 
А причем тут DOM, и с каких пор xml перестал быть текстовым документом?

Автор: dstorm81 13.6.2007, 12:51
2 BuShaRt Вы показываете удивительные незнания работы с xml
тоже пульну ссылкой
http://ru2.php.net/manual/ru/function.dom-domdocument-save.php

Автор: BuShaRt 13.6.2007, 12:58
dstorm81, 
Класс то основанн все равно на записи в текстовый файл...

Автор: dstorm81 13.6.2007, 13:03
ну-с значит всё включено в функцию save?
или блокировку надо делать самому? 
если самому, то хочу увидеть Вашу реализацию блокировки рабочим кодом


Автор: BuShaRt 13.6.2007, 13:08
dstorm81, 
не функция, а метод.. лезим в класс и смотрим smile

Автор: dstorm81 13.6.2007, 13:27
2 BuShaRt 
флудишь, давай конкретизируй, ссылки покажи
и т.д.

Автор: BuShaRt 13.6.2007, 13:31
dstorm81, 
берем notepad, открываем файл класса, ищем нужный метод, смотрим есть ли в нем фильтр или нет, если нету дописываем функцией мною указанной...  Я не понимаю, какие тут ссылки? на что вам ссылку дать? 

Автор: dstorm81 13.6.2007, 13:41
???????????????? совсем рассторился
походу мы разговариваем на разных языках
полное непонимание....
покажите мне исходный код этого класса, если можете, будте добры уж.



Автор: BuShaRt 13.6.2007, 13:48
dstorm81, 
хм, вы его используете - у вас он и должен быть %)

Автор: dstorm81 13.6.2007, 14:08
метод save() реализован в самом пхп5 для работы с xml
и не является моим классом


Автор: BuShaRt 13.6.2007, 15:00
dstorm81, 
Знаете, многие, пользуются стандартными классами, даже не подозрева о их устройстве. Если, даже я не прав в плане, что класс можно легко извлечь, то в любом случае его можно продублировать и подгружать не из ядра, а как внешний класс, при этом свободно можно редактировать весь исходный код класса.

Smarty и PEAR тоже по вашему в PHP вшиты? хм, а я вот на пример их юзаю как внешние классы т.к. это сильно упрощает переносимость готовых программных продуктов.

Добавлено @ 15:06
Для чтения на досуге
http://forum.dklab.ru/php/heap/PodmenaDomdocumentVPhp5NaSvoyKlass.html

Автор: sTa1kEr 13.6.2007, 15:38
dstorm81, а чтение xml через fopen вас почему не устраивает?
Код

$fp = fopen("any.xml", "r+");
flock($fp, LOCK_EX);
$content = fread($fp, 8192);
$xml =  new DOMDocument('1.0');
$xml->loadXML($content);
// Работаем с XML
$content = $xml->saveXML();
fseek($fp, 0);
ftruncate($fp, 0); // забыл очистить
fwrite($fp, $content);
flock($fp, LOCK_UN);
fclose($fp);


Добавлено через 10 минут и 57 секунд
Цитата(BuShaRt @  13.6.2007,  15:00 Найти цитируемый пост)
Знаете, по моему именно дилетанты, пользуються стандартными классами, даже не подозрева о их устройстве. Если, даже я не прав в плане, что класс можно легко извлечь, то в любом случае его можно продублировать и подгружать не из ядра, а как внешний класс, при этом свободно можно редактировать весь исходный код класса.

И зачем изобретать очередной велосипед? Если хочется автоблокировки файлов через метод save, то достаточно расширить класс:
Код

class DOMDocumentLock extends DOMDocument
{
   public function load($filename)
   {
        // Открываем через fopen, болкируем и вызываем loadXML
   }

   public function save($filename)
   {
        // Соответственно разблокируем и сохраняем
   }
}

И не надо ничего дублировать и тем более извлекать.

Автор: BuShaRt 13.6.2007, 18:11
sTa1kEr, 
А если на хостинге PHP4 стоит? PHP5, это хорошо, но я уверен, что для вас ни секрет, что новые технологии должны обжиться, прежде, чем их начинают широко использовать...

имхо "Программист, а не заказчик должен забоиться, чтоб движок работал".

Автор: sTa1kEr 13.6.2007, 18:16
Цитата(BuShaRt @  13.6.2007,  18:11 Найти цитируемый пост)
А если на хостинге PHP4 стоит?

В PHP 4 нету DomDocument smile
Цитата(BuShaRt @  13.6.2007,  18:11 Найти цитируемый пост)
PHP5, это хорошо, но я уверен, что для вас ни секрет, что новые технологии должны обжиться, прежде, чем их начинают широко использовать...

Имхо, PHP 5 уже давно обжился, только некоторые ленивые либо просто глупые хостеры никак не обживутся PHP 5.

Автор: BuShaRt 13.6.2007, 20:48
Цитата(sTa1kEr @  13.6.2007,  18:16 Найти цитируемый пост)
В PHP 4 нету DomDocument 

Если юзать внешним классом, то есть smile))

Автор: dstorm81 14.6.2007, 07:37
2 sTa1kEr
вот именно это я и хотел узнать

Код

class DOMDocumentLock extends DOMDocument
{
   public function load($filename)
   {
        // Открываем через fopen, болкируем и вызываем loadXML
   }

   public function save($filename)
   {
        // Соответственно разблокируем и сохраняем
   }

}


но вопрос был именно в том, что блокирует ли стандартная save(), то есть включена ли в нее эта фишка, или блокировку надо реализовывать самому через extends???
вот в чем пвопрос, хочу получить булевый ответ: да блокировка в save вшита (и ссылка где это описано) или нет блокировка не вшита
Жду ответа  sTa1kEr
P/S/ php5

 ! 
PARROT
Пользуемся кнопкой код!!!

Автор: PARROT 14.6.2007, 09:31

 ! 
PARROT
Прекращаем Базар-Вокзал! Или закрою тему. Спасибо.

Автор: sTa1kEr 14.6.2007, 11:21
Цитата(dstorm81 @  14.6.2007,  07:37 Найти цитируемый пост)
вот в чем пвопрос, хочу получить булевый ответ: да блокировка в save вшита (и ссылка где это описано) или нет блокировка не вшита

false
Более того, ни метод load(), ни метод save() не имеет никакого отношения к стандартным функциям PHP работы с файлами. За эти методы целиком и полностью отвечает библиотека libxml2. Заодно выяснил, что libxml2 умеет загружать xml по http и ftp протоколам, а также сжатые файлы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)