Покинул форум
Сообщений всего: 44
Дата рег-ции: Февр. 2010
Помог: 0 раз(а)
Как сохранить в сессию конектор подключения к базе? То что возвращает база при соединении не получается записать в сессию, результат виден только в рамках текущей работы с пхп файлом. Странно вообще, в рамках файла результат есть, а при перезапуске результата нет. Строковые переменные он возвращает нормально.
<?
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->ТиповыеОтчеты->РабочаяВерсияНастройкиОтчетов());
?>
Какие варианты сохранения результатов есть?
JustUserR
Отправлено: 07 Февраля, 2010 - 00:01:45
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Alpinist пишет:
Какие варианты сохранения результатов есть?
Функция называется serialize которая позволяет сохранить любой доступный в PHP тип данных в виде закодированной строки и в частности положить данный результат в сессию Для обратной раскодировки служит функция unserialize
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
valenok
Отправлено: 07 Февраля, 2010 - 09:38:29
Здесь могла бы быть ваша реклама
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006 Откуда: Israel
Помог: 3 раз(а)
mysql_pconnect
----- Truly yours, Sasha.
JustUserR
Отправлено: 07 Февраля, 2010 - 13:44:44
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
valenok пишет:
mysql_pconnect
Эээ здесь же вроде бы вообще OLE-соединение с базой 1С и суть задачи заключается в том чтобы сохранить и потом считывать ресурс данного OLE-соединения - вроде бы для этих целей serialize/unserialize лучше всего подходят
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
valenok
Отправлено: 07 Февраля, 2010 - 14:23:56
Здесь могла бы быть ваша реклама
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006 Откуда: Israel
Помог: 3 раз(а)
Даже не чувствую себя виноватым за то, что не прочел код.
Механизм сессий и так уже сериализовывает все при записи файл.
Здесь дело в том, что garbage collector по завершению работы скрипта удаляет из памяти соединение с 1С, хотя в файл (сессию) все же записывается адрес в памяти.
К следующему запуску, соответсвнно, адрес уже пуст.
Как вариант shared memory / php-cgi
----- Truly yours, Sasha.
JustUserR
Отправлено: 07 Февраля, 2010 - 14:48:47
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
valenok пишет:
Хотя в файл (сессию) все же записывается адрес в памяти
Тогда все понятно - но mysql_pconnect тут точно не причем
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Alpinist
Отправлено: 07 Февраля, 2010 - 20:27:38
Новичок
Покинул форум
Сообщений всего: 44
Дата рег-ции: Февр. 2010
Помог: 0 раз(а)
valenok пишет:
Здесь дело в том, что garbage collector по завершению работы скрипта удаляет из памяти соединение с 1С, хотя в файл (сессию) все же записывается адрес в памяти.
К следующему запуску, соответсвенно, адрес уже пуст.
Дружище - это 100% и если не секрет откуда взял такие данные?
Говорят __sleep, __wakeup - помогут, но я не могу понять как это все работает
(подробности тут: http://www.urlix.ru/docs/php/language.oop5.magic.html)
Заранее благодарен за помощь.
valenok
Отправлено: 08 Февраля, 2010 - 08:12:00
Здесь могла бы быть ваша реклама
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006 Откуда: Israel
Помог: 3 раз(а)
Я думаю вам лучше этот вопрос направить тем, кто говорит что __sleep / __wakeup помогут.
Данные откуда? Из документации по PHP. Полезная вещь, да.
----- Truly yours, Sasha.
Alpinist
Отправлено: 08 Февраля, 2010 - 09:34:55
Новичок
Покинул форум
Сообщений всего: 44
Дата рег-ции: Февр. 2010
Написанно следующее:
Note: It is not possible to serialize PHP built-in objects.
Дословно: Это не возможно, чтобы преобразовать встроенные объекты PHP в последовательный режим.
PHP вообще способен адекватно передавать COM-объекты? В первом сообщении я привел пример, строковые переменные передавались нормально, а указатель на соединение, котороый возвращает TRUE при соединении, на выходе из сессии возвращает FALSE.
Stierus
Отправлено: 08 Февраля, 2010 - 10:13:48
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Сохранить соединение ты никак не сможешь, можно лишь создавать новое и автоматически приводить его к состоянию такому же, какое было при закрытии предыдущего соединения. В сессию записывать не ресурс соединения, а список действий, которые надо совершить с новым соединением, что бы прийти к тому виду, что у тебя сейчас есть.
valenok
Отправлено: 08 Февраля, 2010 - 10:14:00
Здесь могла бы быть ваша реклама
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006 Откуда: Israel
Помог: 3 раз(а)
В том-же мануале написано
serialize() handles all types, except the resource-type
А многие хостеры вообще позволюят работать с СОМ объектами 1С ?*
----- Truly yours, Sasha.
Alpinist
Отправлено: 08 Февраля, 2010 - 11:29:37
Новичок
Покинул форум
Сообщений всего: 44
Дата рег-ции: Февр. 2010
Помог: 0 раз(а)
valenok пишет:
А многие хостеры вообще позволюят работать с СОМ объектами 1С ?
Без понятия, но тот что сейчас под рукой позволяет это делать, видимо реализовали под линуксом как-то. Эксперименты с php_request_shutdown() не помогут отключить garbage collector на время?
Stierus пишет:
Сохранить соединение ты никак не сможешь, можно лишь создавать новое и автоматически приводить его к состоянию такому же, какое было при закрытии предыдущего соединения. В сессию записывать не ресурс соединения, а список действий, которые надо совершить с новым соединением, что бы прийти к тому виду, что у тебя сейчас есть.
То есть ваше мнение - пул соединений с COM-сервером базовыми средствами php, мне не создать никак?
Stierus
Отправлено: 08 Февраля, 2010 - 15:02:30
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
После отработки скрипта, все открытые соединения закрываются, если не закрываются ( mysql_pconnect и тд) - то теряется связь с ними ...
JustUserR
Отправлено: 08 Февраля, 2010 - 17:04:34
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Alpinist Даже если вы выключите garbage collector то кто вам сказал что PHP сможет при следующем запуке сам найти ту область в памяти и что система ее не очистит
Как адекватное решение напишите daemon скажем на Perlе который будет держать COM-соединения постоянно и уже обменивайтесь данным с ним а он в свою очередь с 1С-базой
Да и кроме того опишите оригинальную задачу зачем сохранять ресурс соединения при перезапуске? Может проблема решается по-другому?
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Alpinist
Отправлено: 09 Февраля, 2010 - 09:49:15
Новичок
Покинул форум
Сообщений всего: 44
Дата рег-ции: Февр. 2010
Помог: 0 раз(а)
JustUserR пишет:
Да и кроме того опишите оригинальную задачу зачем сохранять ресурс соединения при перезапуске?
Необходимо сделать онлайн магазин в связке с 1С 8.1 базой. Веб-сервер находится на удаленном хостинге с поддержкой COM-соединений. Сервер 1С тоже в интернете на выделенном канале. При оформлении заявки на сайте происходит соединение с базой 1С, где формируется Договор с покупателем. Форма журнала договоров с Покупателями обновляется на компьютере менеджера каждые пять секунд и менеджеры получают заявку практически онлайн + могут своевременно выписать все необходимое в случае если человек приехал. Суть в том что если 1С не доступен из интернета то заявка не оформляется, никаких вариантов с тем чтобы отослать как-то по почте результат или сделать сторонюю базу заказчик не рассматривает. Все завязано на том что человек зашел на сайт, оформил заявку, нажал Отправить и приехал оплатить и забрать товар, а менеджеры своевременно прозвонили и подготовили товар.
Задержка 5-6 секунд на одном соединении не годится.
Если выхода не будет то придется написать модуль на перле.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.