[devel] PHP 4.3.4 upgrade
Alexey Gladkov
=?iso-8859-1?q?legion_=CE=C1_altlinux=2Eru?=
Вт Окт 21 19:04:09 MSD 2003
Приветствую !!!
В Daedalus ушела новая сборка PHP 4.3.4 CVS 20031017. В ней произошли
изменения в расположении конфигурационных файлов, а также в системе
создания модулей.
Просьба всех заинтересованных лиц протестировать эту сборку и высказать
свои замечания/пожелания по ней. Эта сборка останется в Daedalus до конца
недели, если замечаний не последует она переедит в Sisyphus.
bugs: из-за того, что rpm не делает обратную сортировку при удалении
зависимых пакетов php удаляется некорректно.
solution: необходимо сначала удалить все пакеты зависящие от php-common,
после этого удалить пакет php-common.
Теперь о проведенных изменениях:
Конфигурация.
Интерпретатор PHP имеет модульную структуру - SAPI
(http://php.net/install).
Модулями SAPI являются расширения каких-либо сервисов.
Модулями расширения (extensions) являются модули добавляющие функциональность
к модулям SAPI.Все эти
модули должны (или могут быть) сконфигурированы независимо друг от
друга. Кроме наличия файла конфигурации должна быть возможность независимого
добавления модулей расширений (extensions) к каждому из
SAPI. Расширения, в свою очередь, должны добавляться без изменения
остальной конфигурации. Поэтому для
конфигурирования PHP (SAPI модулей) была введена следующая структура
каталогов:
/etc/php/<SAPI>/php.ini
/etc/php/<SAPI>/php.d/<EXTENSION>.ini
где SAPI - имя модуля;
EXTENSION - название расширения.
В начале работы SAPI модуль читает основную конфигурацию из файла
'php.ini', находящегося в директории, отведенной для него
(/etc/php/<SAPI>). После этого модуль просматривает директорию,
содержащую расширения для конфигурационного файла
(/etc/php/<SAPI>/php.d).
ВАЖНО!: Все расширения должны содержать суффикс 'ini', иначе они
игнорируются и не добавляются к конфигурации.
Сборка модулей.
При создании подобной модульной структуры (см. Конфигурация) возникает
ряд проблем, связанных с расширениями и SAPI модулями.
Первая проблема заключается в том, что возможна (и весьма вероятна)
ситуация, когда определенное количество расширений было установлено в
систему до того, как был установлен SAPI (еще один) модуль. В этом
случае, необходимо включить все расширения для новоустановленого SAPI.
Вторая -- это несовместимость некоторых расширений с некоторыми
SAPI. Следовательно, определенные расширения не должны быть
включены для одних SAPI и выключены для других.
Для решения этих проблем был создана следующая структура:
1. /usr/share/php/extconf/<EXTENSION>/ - директория, содержащая
конфигурацию для данного расширения.
1.1 /usr/share/php/extconf/<EXTENSION>/config - в этом файле должна
находится конфигурация php, специфичная для этого модуля (например, в
этом файле указывается директива подключения этого модуля
"extension=mysql.so").
1.2 /usr/share/php/extconf/<EXTENSION>/params - здесь находится
конфигурация, необходимая для включения данного модуля в разных SAPI:
* exceptions - в этой переменной перечисляются SAPI модули, для
которых расширение _не_должно_ быть включено.
* file_ini - здесь необходимо указать имя конфигурационного файла
(например "file_ini=mysql.ini")
2. /usr/share/php/service/<SAPI>/ - в этой директории находятся
скрипт(ы) для перезагрузки конфигурации в сервере, для которого
предназначен данный SAPI.
3. /usr/share/php/scripts - содержит скрипты для включения/выключения
какого-либо расширения.
Создание SAPI модуля.
Для более простого создания пакетов SAPI модулей был создан набор rpm
макросов.
Исходные тексты всех SAPI модулей официально входящих в проект PHP
находятся в директории: %php_extsapidir .
В SPEC файле SAPI необходимо:
1. Необходимо определить переменную: php_sapi - она определяет
название SAPI модуля. Именно это имя будет фигурировать вместо <SAPI>
в предыдущих пунктах.
2. Для секций postin/preun необходимо пользоваться специальными
макросами %php_sapi_postin , %php_sapi_preun. Эти скрипты производят
включение/выключение модулей расширений для данного SAPI и
последующий перезапуск сервиса.
3. Необходимо создать скрипт для перезагрузки конфигурации сервиса
обслуживаемого этим SAPI. Этот скрипт должен располагаться в
%php_servicedir/%php_sapi/condrestart
4. Должны быть созданы директории:
* %php_sysconfdir/%php_sapi - это директория, в которой хранится вся
конфигурация php, относящаяся к этому SAPI. В этой директории ищется
основной файл конфигурации - php.ini .
* %php_sysconfdir/%name/php.d - в этой директории осуществляется
поиск расширений для php.ini .
Создание Extension модуля.
Создание модулей расширений во многом похоже на создание SAPI модулей.
Исходные тексты всех SAPI модулей, официально входящих в проект PHP,
находятся в директории: %php_extsrcdir .
В SPEC файле модуля расширения необходимо:
1. Определить переменную %php_extension - это название модуля,
которое будет подставлено вместо <EXTENSION>.
2. Необходимо создать файлы:
* %php_extconf/%php_extension/config
* %php_extconf/%php_extension/params
назначение и содержимое этих файлов было описано выше (см. Сборка
модулей).
3. В секциях postin/preun среди всего прочего необходимо добавить
макросы %php_extension_postin и %php_extension_preun соответственно.
Все rpm макросы описаны в файле %_sysconfdir/rpm/macros.d/php,
принадлежащем пакету php-devel.
---
Rgrds, legion
Подробная информация о списке рассылки Devel