Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Пул соединений
Форумы портала PHP.SU » » Операционная система и системные вызовы » Пул соединений

Страниц (2): [1] 2 »
 

1. Alpinist - 06 Февраля, 2010 - 14:38:33 - перейти к сообщению
Как сохранить в сессию конектор подключения к базе? То что возвращает база при соединении не получается записать в сессию, результат виден только в рамках текущей работы с пхп файлом. Странно вообще, в рамках файла результат есть, а при перезапуске результата нет. Строковые переменные он возвращает нормально.
<?
session_start();
$loggedin="Абдулов (директор)";
$loggedpasv="";
$file="//S2003/мои документы/1C/DemoAccounting";
if($_SESSION['connector']==1) echo "True"; // не вернет тру сколько не перезапускай
// соединение с COM-соединителем 1С-базы
$_SESSION['connector']=New COM("V81.COMConnector");
$res = $_SESSION['connector']->Connect("File=\"$file\";Usr=\"$loggedin\";pwd=\"$loggedpasv\";");
//
if($_SESSION['connector']==1) echo "True"; // вернет тру
echo($res->ТиповыеОтчеты->РабочаяВерсияНастройкиОтчетов());
?>

Какие варианты сохранения результатов есть?
2. JustUserR - 07 Февраля, 2010 - 00:01:45 - перейти к сообщению
Alpinist пишет:
Какие варианты сохранения результатов есть?
Функция называется serialize которая позволяет сохранить любой доступный в PHP тип данных в виде закодированной строки и в частности положить данный результат в сессию Для обратной раскодировки служит функция unserialize
3. valenok - 07 Февраля, 2010 - 09:38:29 - перейти к сообщению
mysql_pconnect
4. JustUserR - 07 Февраля, 2010 - 13:44:44 - перейти к сообщению
valenok пишет:
mysql_pconnect
Эээ здесь же вроде бы вообще OLE-соединение с базой 1С и суть задачи заключается в том чтобы сохранить и потом считывать ресурс данного OLE-соединения - вроде бы для этих целей serialize/unserialize лучше всего подходят
5. valenok - 07 Февраля, 2010 - 14:23:56 - перейти к сообщению
Даже не чувствую себя виноватым за то, что не прочел код.
Механизм сессий и так уже сериализовывает все при записи файл.
Здесь дело в том, что garbage collector по завершению работы скрипта удаляет из памяти соединение с 1С, хотя в файл (сессию) все же записывается адрес в памяти.
К следующему запуску, соответсвнно, адрес уже пуст.

Как вариант shared memory / php-cgi
6. JustUserR - 07 Февраля, 2010 - 14:48:47 - перейти к сообщению
valenok пишет:
Хотя в файл (сессию) все же записывается адрес в памяти
Тогда все понятно - но mysql_pconnect тут точно не причем Улыбка
7. Alpinist - 07 Февраля, 2010 - 20:27:38 - перейти к сообщению
valenok пишет:
Здесь дело в том, что garbage collector по завершению работы скрипта удаляет из памяти соединение с 1С, хотя в файл (сессию) все же записывается адрес в памяти.
К следующему запуску, соответсвенно, адрес уже пуст.

Дружище - это 100% и если не секрет откуда взял такие данные?

Говорят __sleep, __wakeup - помогут, но я не могу понять как это все работает
(подробности тут: http://www.urlix.ru/docs/php/language.oop5.magic.html)

Заранее благодарен за помощь.
8. valenok - 08 Февраля, 2010 - 08:12:00 - перейти к сообщению
Я думаю вам лучше этот вопрос направить тем, кто говорит что __sleep / __wakeup помогут.
Данные откуда? Из документации по PHP. Полезная вещь, да.
9. Alpinist - 08 Февраля, 2010 - 09:34:55 - перейти к сообщению
valenok пишет:
garbage collector

Это отключить можно? Shared memory не подходит, многие хостеры вообще ее не задействуют.
(Добавление)
В документации к serialize:
http://ru2.php.net/manual/en/fun...on.serialize.php

Написанно следующее:
Note: It is not possible to serialize PHP built-in objects.
Дословно: Это не возможно, чтобы преобразовать встроенные объекты PHP в последовательный режим.

PHP вообще способен адекватно передавать COM-объекты? В первом сообщении я привел пример, строковые переменные передавались нормально, а указатель на соединение, котороый возвращает TRUE при соединении, на выходе из сессии возвращает FALSE.
10. Stierus - 08 Февраля, 2010 - 10:13:48 - перейти к сообщению
Сохранить соединение ты никак не сможешь, можно лишь создавать новое и автоматически приводить его к состоянию такому же, какое было при закрытии предыдущего соединения. В сессию записывать не ресурс соединения, а список действий, которые надо совершить с новым соединением, что бы прийти к тому виду, что у тебя сейчас есть.
11. valenok - 08 Февраля, 2010 - 10:14:00 - перейти к сообщению
В том-же мануале написано
serialize() handles all types, except the resource-type

А многие хостеры вообще позволюят работать с СОМ объектами 1С ?*
12. Alpinist - 08 Февраля, 2010 - 11:29:37 - перейти к сообщению
valenok пишет:
А многие хостеры вообще позволюят работать с СОМ объектами 1С ?

Без понятия, но тот что сейчас под рукой позволяет это делать, видимо реализовали под линуксом как-то. Эксперименты с php_request_shutdown() не помогут отключить garbage collector на время?
Stierus пишет:
Сохранить соединение ты никак не сможешь, можно лишь создавать новое и автоматически приводить его к состоянию такому же, какое было при закрытии предыдущего соединения. В сессию записывать не ресурс соединения, а список действий, которые надо совершить с новым соединением, что бы прийти к тому виду, что у тебя сейчас есть.

То есть ваше мнение - пул соединений с COM-сервером базовыми средствами php, мне не создать никак?
13. Stierus - 08 Февраля, 2010 - 15:02:30 - перейти к сообщению
После отработки скрипта, все открытые соединения закрываются, если не закрываются ( mysql_pconnect и тд) - то теряется связь с ними ...
14. JustUserR - 08 Февраля, 2010 - 17:04:34 - перейти к сообщению
Alpinist Даже если вы выключите garbage collector то кто вам сказал что PHP сможет при следующем запуке сам найти ту область в памяти и что система ее не очистит
Как адекватное решение напишите daemon скажем на Perlе который будет держать COM-соединения постоянно и уже обменивайтесь данным с ним а он в свою очередь с 1С-базой
Да и кроме того опишите оригинальную задачу зачем сохранять ресурс соединения при перезапуске? Может проблема решается по-другому?
15. Alpinist - 09 Февраля, 2010 - 09:49:15 - перейти к сообщению
JustUserR пишет:
Да и кроме того опишите оригинальную задачу зачем сохранять ресурс соединения при перезапуске?

Необходимо сделать онлайн магазин в связке с 1С 8.1 базой. Веб-сервер находится на удаленном хостинге с поддержкой COM-соединений. Сервер 1С тоже в интернете на выделенном канале. При оформлении заявки на сайте происходит соединение с базой 1С, где формируется Договор с покупателем. Форма журнала договоров с Покупателями обновляется на компьютере менеджера каждые пять секунд и менеджеры получают заявку практически онлайн + могут своевременно выписать все необходимое в случае если человек приехал. Суть в том что если 1С не доступен из интернета то заявка не оформляется, никаких вариантов с тем чтобы отослать как-то по почте результат или сделать сторонюю базу заказчик не рассматривает. Все завязано на том что человек зашел на сайт, оформил заявку, нажал Отправить и приехал оплатить и забрать товар, а менеджеры своевременно прозвонили и подготовили товар.
Задержка 5-6 секунд на одном соединении не годится.
Если выхода не будет то придется написать модуль на перле.

 

Powered by ExBB FM 1.0 RC1