|
|
|
| Стоит следующая связка Apache1.3+PHP4.3+MySQL4 под Win2k3.
Работаем через COM с 1С. Так как база большая, то хотелось бы создавать COM-объект один раз за сессию и дальше просто к нему обращаться.
То, что сессионные переменные объектами быть не могут я в курсе.
Попробовал делать через глобальные переменные:
session_start();
if (!isset($_SESSION['res_init']))
{
$GLOBALS[v77]=new COM("v77.Application");
$res_init=$GLOBALS[v77]->Initialize($GLOBALS[v77]->RMTrade, "/D\\\\malysh\\db0 /n**** /p****", "");
echo "Объект создан. Ссылка на 1С=".$GLOBALS[v77]->RMTrade;
echo "<br>Идентификатор сессии=".session_id();
if( !$res_init ) {
echo "<b>жопа</b>";
session_destroy();
return 0;
}
echo "<br><h2>Крута!!!!!</h2><br>";
$_SESSION['res_init']=$res_init;
}
else
{
echo "Сессия уже создана. Ссылка на 1С=".$GLOBALS[v77]->RMTrade;
echo "<br>Идентификатор сессии=".session_id();
}
|
Тоже самое - при завершении работы скрипта объект COM уничтожается и разумеется при следующем обращении уже к нему обратится нельзя.
Вот собственно и вопрос - неужели данную задачу нельзя решить средствами PHP и придется разбираться с ASP ради этого?
Устроит любой вариант решения - или создавать объект в пределах сессии или глобальный - сайт будет под паролем для дилеров, там больше пары десятков посетителей в принципе не будет. | |
|
|
|
|
|
|
|
для: Добрый Дэн
(29.03.2006 в 19:37)
| | ASP я думаю тоже не сильно пособит - здесь ограничения протокола HTTP, каждое обращения клиента к серверу воспринимается как новое обращение - нет поддержки сессии на уровне протокола, поэтому сам сервер не может определить одного клиента от другого или был этот клиент на сервере или пришёл в первый раз - для него все клиенты пришли в первый раз, даже если это один клиент на сервере сидит. | |
|
|
|
|
|
|
|
для: cheops
(30.03.2006 в 13:42)
| | А этот COM нельзя того... в $_SEEION поместить? сериализовав предварительно, конечно. | |
|
|
|
|
|
|
|
для: Trianon
(30.03.2006 в 14:02)
| | Можно попробовать, но что-то мне подсказывает, что он здорово на расширение завязан и PHP-ный объект хранит лишь дискриптор внутреннего объекта... | |
|
|
|
|
|
|
|
для: Trianon
(30.03.2006 в 14:02)
| | >А этот COM нельзя того... в $_SEEION поместить? сериализовав
>предварительно, конечно.
Там следующий прикол - при создании COM объекта в списке процессов появляется 1cv7.exe, который после загрузки странички (окончания выполнения php-скрипта) исчезает.
Уже возникли совсем бредовые мысли - сделать через фреймы - в одном фрейме создается COM-объект 1С и запускается бесконечный цикл, а из второго обращаемся к этому объекту... | |
|
|
|
|
|
|
|
для: Добрый Дэн
(30.03.2006 в 14:35)
| | Время работы скрипта ограничено. Да и принимать он ничего не сможет.
Вот бредовая мысль от меня.
Запустить php-command-line процесс, который бы работал с COM-ом, а с PHP-apache-скриптами общался бы через очередь запросов, реализованную на файлах (тяжело и ненадежно) или на БД (еще тяжелее, но надежнее).
Его наверное даже службой можно было бы сделать. Но это уже фенечки. | |
|
|
|
|
|
|
|
для: Trianon
(30.03.2006 в 14:50)
| | По-моему это уже совсем шаманство, а вот идея с запуском скрипта вне веб-сервера мне нравится - может разрешить исполнять скрипту команды ОС и оттуда запускать скрипт и получать указатель на COM-объект? Или я глючу или это теоритически возможно. | |
|
|
|
|
|
|
|
для: Добрый Дэн
(30.03.2006 в 15:14)
| | Выполнение команд OC вополне можно включить - где всё действо происходит на локальной машине или на серере с доступом из Интернет? | |
|
|
|
|
|
|
|
для: cheops
(30.03.2006 в 21:40)
| | На отдельном сервере, к которому будет открыт доступ из инета. Сайт изначально будет закрыт паролем, так что лишних "куль хацкеров" должно быть меньше. | |
|
|
|
|
|
|
|
для: Добрый Дэн
(31.03.2006 в 10:34)
| | Тогда можно выполнять команды операционной системы при помощи system() или аналога, только для этого придётся перевести сервер из безопасного режима (если он в нём находится). | |
|
|
|