On Tue, Aug 10, 2010 at 07:13:31PM +0400, Alexey Gladkov wrote: > On 10.08.2010 13:49, Slava Dubrovskiy wrote: [...] > > 2. Зачем конфиги располагаются в версийзависимых директориях? > > Чтобы можно было держать несколько php разных версий одновременно. Вопрос в том, насколько разных? Т.е., нужно ли обеспечивать теоретическую возможность наличия рядом, например, 5.2.13 и 5.2.14? Кстати, использованный метод реализации (php_ini_path_override в каждом sapi) в некоторых случаях ведёт себя не так, как оригинальный (например, если установлена переменная PHPRC, но в указанном там каталоге нет php.ini, системный php.ini не будет найден). Возможно, применённая схема была не совсем правильной (вместо засовывания каждого sapi в отдельный каталог можно было собирать php с --with-config-file-path=%php5_sysconfdir, а для поддержки отдельных файлов конфигурации для разных sapi создавать там файлы php-SAPI.ini, не трогая стандартный механизм поиска). Впрочем, основная проблема в наличии в php.ini настроек, зависящих от версии php - safe_mode_include_dir, include_path, extension_dir, alt_sapi_config_ini_scan_dir, из-за которых при изменении версии php в любом случае придётся править этот файл. Причём введение переменной alt_sapi_config_ini_scan_dir, насколько я понял, вызвано главным образом желанием использовать отдельные каталоги для разных sapi (в противном случае хватило бы опять-таки сборки с нужным значением --with-config-file-scan-dir); в принципе это место можно попытаться пропатчить для использования php-SAPI.d и избавиться от переменной в php.ini (которая тоже добавлена патчем). Ещё можно попробовать перенести в main/main.c инициализацию части констант (как минимум PHP_VERSION) до вызова php_init_config(); тогда можно будет писать в php.ini что-то типа alt_sapi_config_ini_scan_dir = "/etc/php/" PHP_VERSION "/cli/php.d" Кстати, в ветке 5.3 это изменение порядка инициализации уже сделано. Тогда можно будет иметь php.ini с содержимым, не зависящим от версии, и, например, по умолчанию класть в каталог с конкретным номером версии симлинк на файл из каталога php-5.2 (или 5.3 - их, видимо, всё-таки придётся разносить), а уже те файлы просто объявить как %config. Правда, остаётся открытым вопрос с обновлением фрагментов конфигурации для расширений. > > Обновление php это просто ад. Приходится вручную проверять все изменения > > и вносить их заново. > > Если происходит обновление по минорной версии, то достаточно > переместить конфиги. Однако автоматически это не происходит. Можно допустить, что при обновлении типа 5.2.x -> 5.3.x что-то действительно нужно менять вручную, но в пределах одной ветки (как сейчас, 5.2.13 -> 5.2.14) хотелось бы хоть какой-то автоматизации. > > 3. Зачем safe-mode включен по умолчанию? > > Не знаю как сейчас, но раньше я делал для этих целей control. В одном > из его профилей все гайки были раскручены. Также был реализован > механизм для создания своих профилей для control. control там и сейчас есть, но при обновлении пакета опять-таки не помогает. Файлы для создания своих профилей кладутся в каталог с жёсткой зависимостью от номера версии php - т.е., при обновлении минорной версии эти файлы тоже придётся перекладывать.