PHP только начинаю осваивать, до этого в основном только с Delphi дело имел. Схема самая простая: тонкий клиент - Веб-Сервер (apache, php 5.2) - СУБД (MSSQL). На клиенте происходит авторизация. Данные попадают в php-скрипт, устанавливается соединение с MSSQL, делается какая-то выборка данных на клиент. Эту часть я прошёл. Появились вопросы следующего характера: допустим, я не хочу устанавливать и рвать соединение с сервером БД на каждый запрос клиента. Хочется установить соединение один раз и далее гнать все запросы через данный коннект. Каким образом я могу сохранить идентификатор соединения до следующего обращения пользователя? Подозреваю, что всё дело в сессиях, но пока не могу понять, каким образом передаётся указатель на объект "соединение" между скриптами. Вопрос 2: есть ли возможность отловить момент завершения сессии? Т.е. а) пользователь принудительно разорвал сессию (корректно закончил работу), б) сессия отвалилась по тайм-ауту. З.Ы. Документацию читал, поиском по форуму пользовался. Только пока безрезультатно (сильно подозреваю, что топчусь вокруг да около, только вот слов ключевых не знаю.. ) З.З.Ы. Можно без примеров, просто ткните носом в соответствующий раздел документации, я дальше сам разберусь.
Никак. Соеденение закрывается после выполнения скрипта (я прав?), но в одном скрипте, псосле открытия одного соеденения, может быть сколь-угодно запросов. Функция session_is_registered() - передаешь её ID сессии, она возвращает истину/ложь. Момент отловить нельзя, разве что если скрипт работает в бесконечном скрипте и постоянно проверяет наличие сессии с таким ID.
+1. Тут прикол в том, что php - это что-то типа парсера, который вызывается апачем для разбора (ну и выполнения) кода данной страницы, которую запросил пользователь, соотв-но, всё это происходит в контексте апача. Соотв-но, когда php-интерпретатор разобрал код, апач его прибивает. Вместе со всеми соединениями и т.п. Это совсем грубое объяснение, чтобы было понятно, почему это нельзя сделать.
Ega23, во первых, в php.ini тебя должны интересовать настройки: mssql.allow_persistent "1" mssql.max_persistent "-1" mssql.timeout "60" Во вторых, тебя должна интересовать функция mssql_pconnect для установки соединения. И все! [vs] и RomanBush получают 4-ку. На двоих )
Спасибо за ответы. Тогда возникает следующий вопрос: а нафига в этом случае вообще нужны сессии? В чём их прикол? Если никаких объектов в памяти не сохраняется? А задача с коннектом к БД - это частная задача. На самом деле архитектура комплекса гораздо сложнее, с WebServer-a идёт связь с сервером приложений по некой обёртке вокруг TCP. Фишка в том, что инициализация этой обёртки - достаточно ресурсоёмкая операция. Хотелось бы по-возможности, проделать её единожды за сеанс. Собственно, в какую сторону мне тогда надо глядеть? Какие-нибудь CGI? Или ещё что-то?
можно сериализовать объект и положить его в сессии. Тогда инициализацию скорее всего можно будет и не делать. Если же надо разным пользователям один и тот же объект: сериализовать и положить в файл
Если можно, то с этого места по-подробнее. Насколько я понял, время жизни созданного мной объекта = времени выполнения скрипта (ну или если я его явно сам не убью). Или всё-таки есть другие другие варианты?
serialize() Магические методы объектов: __sleep, __wakeup PS> Даже на php4 сейчас работает много больших проектов. С приходом php5 можно реализовывать довольно сложные проекты. Единственно что он может, это подобно приложению на C, выполняться постоянно. Хотя для обхода последней проблемы тоже существуют некоторые способы
Спасибо, сейчас буду смотреть. И вот ещё: где можно скачать на локал (трафик ограничен, чтобы в он-лайн всегда читать) мануал по php 5? Есть какая-то полу-переведённая на русский версия, но ощущение - лучше бы вообще не переводили.
у меня с http://php.net, локализованная. Почти все стандартные функции переведены... Если копать глубже надо читать по забугорному http://ru2.php.net/manual/ru/language.oop5.magic.php (несмотря на два ru, написана поихнему)
Да мне пофиг, я по-аглицки нормально читаю. По русски, конечно, было-бы лучше, но только в том случае, если перевод действительно грамотный.
У меня по четвертому был в chm... надо сказать очень удобно... было Сейчас скачан html, т.к. ZendStudio умеет делать быстрый поиск функций по html версии. А раньше да... список функций -> Ctrl+F... романтика
Есть APC, есть SRM, у него даже есть русская документация- который как раз в вашем случае и нужен, имхо.
Процесс инициализации-финализации соединения действительно дорогой. А мелких запросов с клиента может переть немало. И клиентов самих - от 20 до 1000.
несчитая саой настройки *nix Apache & PHP - там разварачиваются на раз ... вот с почтой и днс придется помучатся