В предыдущих статьях цикла мы начали рассматривать системные переменные или директивы РНР, которые устанавливаются через файл php.ini и позволяют тонко настроить среду исполнения РНР. Большинство модулей и расширений, как поставляемых в стандартном дистрибутиве, так и в виде дополнительного набора PECL, используют файл php.ini для хранения своих конфигураций. Вместе с тем этот файл универсальный, то есть он изначально включает все директивы для большинства модулей, даже если они не подключены и не используются. В принципе это может немного сказаться на скорости загрузки (если PHP используется как CGI-модуль), поэтому в случае настройки РНР под себя (для конкретного проекта) вы можете удалить ту часть директив, которые гарантированно не используются. Но это достаточно тонкая и опасная процедура, ведь удаление нужной директивы может привести к неработоспособности РНР или неверной работе сайта, а то и к существенному ослаблению защиты сервера.
Поэтому, прежде чем вносить какие-либо изменения в файл php.ini, советуем внимательно изучить его структуру и предназначение отдельных директив. В этом вам, надеемся, поможет этот цикл статей. Мы будем рассматривать конфигурацию РНР версии 5.0.х, так что, если у вас более ранняя версия, некоторые директивы могут отсутствовать. Напомним, что директивы для отдельных модулей находятся в секциях, обозначаемых как [название секции], например: [ODBC] отвечает за настройки связи с базами данных через механизм ODBC, а [MySQL] – за настройку параметров доступа к серверу MySQL.
Имена директив могут отличаться от общесистемных – для отдельных модулей они могут иметь вид имя_модуля.имя_директивы. Так же как и для остальных параметров, директивы отдельных модулей можно в большинстве случаев устанавливать не только через php.ini, но и с помощью уже описанной функции ini_set().
При рассмотрении файла php.ini невольно приходит мысль, что по нему можно делать исследование на тему "На каких СУБД работают веб-сайты" – если РНР не умеет работать с какой-то СУБД (система управления базами данных), это почти стопроцентно означает, что она непригодна для массового рынка веб-сайтов. Основное место среди всех секций с директивами занимают настройки модулей для работы с базами данных. Мы уже рассмотрели в предыдущей статье директивы конфигурации ODBC, MySQL и MySQLI, сейчас же продолжим рассмотрение конфигураций доступа к PostgresSQL, Sybase, dbX и FrontBase.
[PostgresSQL]
PostgreSQL по функциональности может соперничать с MySQL
Эта секция описывает конфигурацию популярной СУБД с открытым кодом (лицензия BSD) PostgreSQL, которая в принципе позиционируется как альтернатива MySQL. Если вашему приложению требуется особая функциональность от базы данных (абстрактные типы данных, транзакции, триггеры и хранимые процедуры, использующие в том числе и специальную версию языка Perl), то эта база будет идеальным выбором, особенно учитывая ее открытость. Для веб-приложений связка PostgreSQL+РНР может понадобиться в случае интеграции портала с уже существующей корпоративной системой или для создания каких-то уникальных сервисов, приложений электронной коммерции и т. д. Да, еще один момент – разработчики не рекомендуют использовать РНР версий 4.0.х совместно с PostgreSQL, так как в модуле для этой версии присутствует ряд недоработок – рекомендуется использовать версии 4.1 и выше. Несмотря на серьезную функциональность, набор директив довольно скромный.
pgsql.allow_persistent = [On/Off] – уже почти традиционная опция, разрешающая использовать постоянные соединения для уменьшения нагрузки на сервер СУБД. По умолчанию опция разрешена.
pgsql.auto_reset_persistent = [Off/On] – специфическая для этой БД директива, позволяющая механизму установления соединений определять работающие открытые постоянные соединения и использовать их или же автоматически удалять нерабочие (broken) ссылки и создавать новые соединения. Эти проверки работают только при вызове функции pg_pconnect() и немного снижают производительность, замедляя установку нового соединения, поэтому изначально опция отключена. В то же время при создании серьезных приложений, где предъявляются повышенные требования к устойчивости и стабильности работы (даже в ущерб скорости), эту опцию можно включить. Замечу, что директива появилась в РНР 4.2.0.
pgsql.max_persistent = [-1/целое число] – задает количество одновременно открытых постоянных соединений.
pgsql.max_links = [-1/целое число] – задает ограничение общего количества открытых соединений (постоянных и обычных вместе).
pgsql.ignore_notice = [0/1] – опция появилась в РНР версии 4.3 и указывает интерпретатору игнорировать все сообщения про ошибки и замечания от СУБД.
pgsql.log_notice = [0/1] – разрешает вести лог всех сообщений от базы данных. Директива зависит от предыдущей, ignore_notice, и работает, только если она отключена.
[Sybase] и [Sybase-CT]
Sybase – мощная коммерческая база данных уровня предприятия
Sybase представляет собой очень мощную коммерческую систему управления базами данных уровня предприятия. Она часто используется для сбора и хранения огромных объемов информации в корпоративной среде: например, данных о продажах, бухгалтерских и других данных. Поддержка в РНР этой базы означает, что теперь есть возможность разрабатывать приложения для корпоративных порталов и интранета, напрямую интегрируя их с основным хранилищем данных. В одном из справочников по РНР я нашел указание, что функции для работы с Microsoft SQL Server идентичны и для Sybase (и наоборот), поэтому можно использовать только одно расширение. Хотя если вы работаете с последними версиями этих СУБД, рекомендую использовать для каждой базы свой модуль.
Часть директив, которые отвечают за управление постоянными соединениями, аналогична описанным выше, так что мы только упомянем их название и значения: sybase.allow_persistent = [On/Off], sybase.max_persistent = [-1/целое число], sybase.max_links = [-1/целое число].
sybase.interface_file = ["/usr/sybase/interfaces"/"путь к директории"] – изначально закомментированная опция, о которой ни слова не сказано в руководстве по РНР, но само название директивы подсказывает, что она может указывать путь к интерфейсным библиотекам Sybase.
sybase.min_error_severity = [10] – директива влияет на типы ошибок (их серьезность), которые выводятся пользователю (аналогично error_reporting для самого РНР). Аналогично следующая директива – sybase.min_message_severity = [10] – управляет типами сообщений, которые передаются пользователю.
sybase.compatability_mode = [Off/On] – включает режим совместимости с предыдущими версиями РНР (конкретнее – с РНР 3.0).
magic_quotes_sybase = [Off/On] – при включенной директиве одиночные кавычки экранируются путем добавления еще одной кавычки (удвоением). По умолчанию директива отключена, вместо нее используются общесистемные директивы magic_quotes_gpc и magic_quotes_runtime. При включении директивы она имеет более высокий приоритет, чем директива magic_quotes_gpc, и перекрывает ее. По умолчанию она отключена.
[dbx]
dbX – это один из методов абстрагирования от особенностей конкретной базы данных при разработке сайта
dbX – это один из методов абстрагирования от особенностей конкретной базы данных при разработке веб-приложения. Хотя известно множество других модулей, библиотек и классов для отделения логики приложения от функциональности конкретной СУБД, dbX является наиболее простым и изначально встроенным средством. В настоящее время dbX поддерживает почти все популярные базы данных – FrontBase (PHP 4.1.0), Microsoft SQL Server, MySQL, ODBC, PostgreSQL, Sybase-CT (PHP 4.2.0), Oracle (oci8, PHP 4.3.0) и SQLite (PHP 5). Несмотря на такую универсальность, в php.ini определяется всего одна директива для этого расширения.
dbx.colnames_case = ["unchanged"/"uppercase"/"lowercase"] – определяет, каким образом будут воспроизводиться названия столбцов в функции dbx_query(): по умолчанию регистр остается без изменений, «uppercase» и «lowercase» переводят их в верхний и нижний регистр соответственно.
[FrontBase]
FrontBase – это еще одна мощная коммерческая СУБД, которая применяется для построения информационной платформы предприятия. Она разработана для большинства существующих платформ, и РНР-разработчик может столкнуться с необходимостью работы с FrontBase при создании специализированных приложений для бизнеса, внутрикорпоративных порталов или электронных магазинов. FrontBase поставляет самостоятельные модули для связи своей СУБД и РНР, которые можно свободно загрузить с сайта разработчика (/redir.php?url=www.frontbase.com%3C%2Fa%3E%29%2C причем присутствуют отдельно версии как для РНР 3.0, так и новое расширение для РНР 4.0 (4.1/4.2).
По умолчанию все директивы, относящиеся к FrontBase, отключены (закомментированы). Укажем только на некоторые нестандартные опции, более подробно про работу с FrontBase смотрите в официальной документации.
Постоянные соединения (директива fbsql.allow_persistent=[On/Off]) появились только в РНР 4.2.0, а в отличие от остальных СУБД число открытых соединений изначально ограничено 128 (директива fbsql.max_links = [128]). Как и для MySQL, присутствуют директивы для задания логина и пароля пользователя по умолчанию, а также хоста и базы данных для него (директивы fbsql.default_user, fbsql.default_password, fbsql.default_database и fbsql.default_host).
Как видите, РНР поддерживает работу со всеми популярными базами данных, причем на самом деле их существенно больше, так как не все модули требуют определения директив в файле php.ini. В следующей части материала мы рассмотрим директивы других модулей, которые могут пригодиться при разработке, – например, mbstring для работы со строками в кодировке Unicode, модуля для работы с расширением COM и, скорее всего, самые главные (после общесистемных и MySQL) директивы, отвечающие за настройку механизма сессий.
Ссылки по теме
- PHP official site
- PHP Manual: Runtime Configuration
- FrontBase Relational Database Server
- PostgreSQL
- PHP: секреты файла php.ini. Часть 3
Статья получена: hostinfo.ru