За последние 24 часа нас посетил 16481 программист и 1568 роботов. Сейчас ищут 924 программиста ...

Не судите строго за вопросы

Тема в разделе "PHP для новичков", создана пользователем Ega23, 7 апр 2008.

  1. Ega23

    Ega23 Активный пользователь

    С нами с:
    20 фев 2008
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Дубна
    PHP только начинаю осваивать, до этого в основном только с Delphi дело имел.

    Схема самая простая:
    тонкий клиент - Веб-Сервер (apache, php 5.2) - СУБД (MSSQL).

    На клиенте происходит авторизация. Данные попадают в php-скрипт, устанавливается соединение с MSSQL, делается какая-то выборка данных на клиент.
    Эту часть я прошёл.

    Появились вопросы следующего характера: допустим, я не хочу устанавливать и рвать соединение с сервером БД на каждый запрос клиента. Хочется установить соединение один раз и далее гнать все запросы через данный коннект.
    Каким образом я могу сохранить идентификатор соединения до следующего обращения пользователя?
    Подозреваю, что всё дело в сессиях, но пока не могу понять, каким образом передаётся указатель на объект "соединение" между скриптами.
    Вопрос 2: есть ли возможность отловить момент завершения сессии? Т.е. а) пользователь принудительно разорвал сессию (корректно закончил работу), б) сессия отвалилась по тайм-ауту.

    З.Ы.
    Документацию читал, поиском по форуму пользовался. Только пока безрезультатно (сильно подозреваю, что топчусь вокруг да около, только вот слов ключевых не знаю.. :) )

    З.З.Ы.
    Можно без примеров, просто ткните носом в соответствующий раздел документации, я дальше сам разберусь.
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Никак. Соеденение закрывается после выполнения скрипта (я прав?), но в одном скрипте, псосле открытия одного соеденения, может быть сколь-угодно запросов.

    Функция session_is_registered() - передаешь её ID сессии, она возвращает истину/ложь. Момент отловить нельзя, разве что если скрипт работает в бесконечном скрипте и постоянно проверяет наличие сессии с таким ID.
     
  3. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    +1.
    Тут прикол в том, что php - это что-то типа парсера, который вызывается апачем для разбора (ну и выполнения) кода данной страницы, которую запросил пользователь, соотв-но, всё это происходит в контексте апача. Соотв-но, когда php-интерпретатор разобрал код, апач его прибивает. Вместе со всеми соединениями и т.п.
    Это совсем грубое объяснение, чтобы было понятно, почему это нельзя сделать.
     
  4. Anonymous

    Anonymous Guest

    Ega23, во первых, в php.ini тебя должны интересовать настройки:

    mssql.allow_persistent "1"
    mssql.max_persistent "-1"
    mssql.timeout "60"

    Во вторых, тебя должна интересовать функция mssql_pconnect для установки соединения.

    И все!

    [vs] и RomanBush получают 4-ку. На двоих )
     
  5. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  6. Ega23

    Ega23 Активный пользователь

    С нами с:
    20 фев 2008
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Дубна
    Спасибо за ответы.
    Тогда возникает следующий вопрос: а нафига в этом случае вообще нужны сессии? В чём их прикол? Если никаких объектов в памяти не сохраняется?
    А задача с коннектом к БД - это частная задача. На самом деле архитектура комплекса гораздо сложнее, с WebServer-a идёт связь с сервером приложений по некой обёртке вокруг TCP. Фишка в том, что инициализация этой обёртки - достаточно ресурсоёмкая операция. Хотелось бы по-возможности, проделать её единожды за сеанс.
    Собственно, в какую сторону мне тогда надо глядеть? Какие-нибудь CGI? Или ещё что-то?
     
  7. Anonymous

    Anonymous Guest

    В идеале - глядеть в сторону написания своего расширения.
     
  8. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    можно сериализовать объект и положить его в сессии. Тогда инициализацию скорее всего можно будет и не делать.

    Если же надо разным пользователям один и тот же объект: сериализовать и положить в файл
     
  9. Ega23

    Ega23 Активный пользователь

    С нами с:
    20 фев 2008
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Дубна
    Если можно, то с этого места по-подробнее.
    Насколько я понял, время жизни созданного мной объекта = времени выполнения скрипта (ну или если я его явно сам не убью). Или всё-таки есть другие другие варианты?
     
  10. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    serialize()

    Магические методы объектов: __sleep, __wakeup

    PS> Даже на php4 сейчас работает много больших проектов. С приходом php5 можно реализовывать довольно сложные проекты. Единственно что он может, это подобно приложению на C, выполняться постоянно. Хотя для обхода последней проблемы тоже существуют некоторые способы
     
  11. Ega23

    Ega23 Активный пользователь

    С нами с:
    20 фев 2008
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Дубна
    Спасибо, сейчас буду смотреть.

    И вот ещё: где можно скачать на локал (трафик ограничен, чтобы в он-лайн всегда читать) мануал по php 5? Есть какая-то полу-переведённая на русский версия, но ощущение - лучше бы вообще не переводили.
     
  12. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  13. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    у меня с http://php.net, локализованная. Почти все стандартные функции переведены... Если копать глубже надо читать по забугорному

    http://ru2.php.net/manual/ru/language.oop5.magic.php (несмотря на два ru, написана поихнему)
     
  14. Ega23

    Ega23 Активный пользователь

    С нами с:
    20 фев 2008
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Дубна
    Да мне пофиг, я по-аглицки нормально читаю. По русски, конечно, было-бы лучше, но только в том случае, если перевод действительно грамотный.
     
  15. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Первый за последнее время новичек, который умеет работать головой... Приятно радует
     
  16. Ega23

    Ega23 Активный пользователь

    С нами с:
    20 фев 2008
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Дубна
    Да, этот мануал у меня есть. В chm очень криво выглядит - какие-то проблемы с кодировкой.
     
  17. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    У меня по четвертому был в chm... надо сказать очень удобно... было :)
    Сейчас скачан html, т.к. ZendStudio умеет делать быстрый поиск функций по html версии. А раньше да... список функций -> Ctrl+F... романтика :)
     
  18. Anonymous

    Anonymous Guest

    Есть APC, есть SRM, у него даже есть русская документация- который как раз в вашем случае и нужен, имхо.
     
  19. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    А зачем так нужно постоянное соединение с клиентом?
     
  20. Ega23

    Ega23 Активный пользователь

    С нами с:
    20 фев 2008
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Дубна
    Прочитал. Любопытно. Однако нереально - порта под win нету. А у меня пока *nix нету.. :)
     
  21. Ega23

    Ega23 Активный пользователь

    С нами с:
    20 фев 2008
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Дубна
    Процесс инициализации-финализации соединения действительно дорогой. А мелких запросов с клиента может переть немало. И клиентов самих - от 20 до 1000.
     
  22. Anonymous

    Anonymous Guest

    Ega23, забудьте о любых нестандартных и половине стандартных возможностей php под вин. Честно.
     
  23. Ega23

    Ega23 Активный пользователь

    С нами с:
    20 фев 2008
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Дубна
    т.е. рекомендуете сразу веб-сервер под никсом поднимать?
     
  24. Anonymous

    Anonymous Guest

    без вопросов даже. это кстати, даже проще, чем под виндой :)
     
  25. nimistar

    nimistar Активный пользователь

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    несчитая саой настройки *nix
    Apache & PHP - там разварачиваются на раз ... вот с почтой и днс придется помучатся :)