Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Проблемы чтения и блокировки файлов (Kirill_)
Author Message
Kirill_
Заглянувший



Joined: 13 Aug 2008
Posts: 18
Карма: 1
   поощрить/наказать

Location: СПб

PostPosted: Tue Oct 11, 2011 3:33 am (написано за 1 минуту 11 секунд)
   Post subject: Проблемы чтения и блокировки файлов
Reply with quote

Для обмена данными между распараллеливаемыми процессами(с использованием CURL_MULTI) потребовалось самостоятельно реализовать механизм, идентичный PHP сессии и столь же надёжный. Получился код:
Code (php): скопировать код в буфер обмена
public function __construct(){
                $this->session_file=fopen (www.php.net/fopen)($session_path,'a+b');                           

                flock (www.php.net/flock)($this->session_file,LOCK_EX);
               
                if (($size=filesize (www.php.net/filesize)($session_path))){
                        fseek (www.php.net/fseek)($this->session_file,0);
                        $this->session=unserialize (www.php.net/unserialize)(fread (www.php.net/fread)($this->session_file,$size));                       
                }
}
[здесь — модификация $this->session]
Code (php): скопировать код в буфер обмена
public function __destuct(){
                        ftruncate (www.php.net/ftruncate)($this->session_file,0);
                        fwrite (www.php.net/fwrite)($this->session_file,serialize (www.php.net/serialize)($this->session));
                        flush (www.php.net/flush)($this->session_file);
                        @flock (www.php.net/flock)($this->session_file, LOCK_UN);
                        fclose (www.php.net/fclose)($this->session_file);

}
Этот простейший код «из учебника» не работает. Очень часто возникает ошибка типа:

<b>Notice</b>: unserialize() [<a href='function.unserialize'>function.unserialize</a>]: Error at offset 25820 of 25823 bytes
Что она означает — не знаю. Или fread некорректно работает, или операция чтения вклинивается между операцией записи.

Решение с file_get_contents работает, но я понимаю, что при больших нагрузках не удастся даже подстраховаться от ошибок :(

Условия использования: PHP 5.2.6, Windows XP(NTFS)

Уже четыре ночи сижу над этой проблемой — ничего не могу придумать. :(
Поэтому заранее очень благодарю за любую помощь.
Back to top
View user's profile Send private message Send e-mail
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Fri Jan 06, 2012 10:22 pm (спустя 2 месяца 26 дней 18 часов 49 минут; написано за 1 минуту 10 секунд)
   Post subject:
Reply with quote

Kirill_,
phpfaq.ru/debug

Учитесь отладке - это едва ли не самое важное, в работе программиста. (-;

Что нужно сделать чтобы разрешить данную проблему? Правильно, посмотреть что же такое передается функции unserialize,
что она так на вас ругается. (-:
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML