Приветствую! Для начала, общая инфа:
1. Centos 6.5
2. Nginx 1.6.2 (front-end) + Apache 2.2.15 (back-end)
3. PHP 5.4.33 - в режиме CGI
4. ISPManager 4
Суть проблемы:
У каждого виртуального хоста, есть свой пользовательский php.ini (в общем, это и так понятно), в котором по умолчанию описаны две директивы: sendmail_path и session.save_path. В глобальном php.ini ("/etc/php.ini"), прописал все общие необходимые настройки. Однако, эти настройки не подхватываются. К примеру, прописал я для "disable_functions" список функций в общем php.ini, рестартонул Apache и на любом виртуальном хосте, та же функция exec() выполнится без проблем. Если директиву прописать в пользовательском файле php.ini, то всё отрабатывает как и полагается, но писать одно и тоже для всех хостов вручную - как-то не кошерно.
Как решил на данном этапе:
Создал файл php.ini в директории "php.d", где и прописал все необходимые директивы, которые распространяются на все хосты.
Что не устраивает:
Приоритет php.ini в директории "php.d" имеет приоритет выше, чем пользовательский. Да, если смотреть относительно той же директивы "disable_functions", то это можно считать плюсом, но в большей степени - это всё же минус. К примеру, в общих настройках, я укажу временную зону Гондураса. Тогда юзер уже не сможет эту зону изменить в своём php.ini.
Что хотел бы иметь в идеале:
Собственно, обратную приоритетность. То есть, если в пользовательском php.ini не прописана какая-то директива, то она подхватывается из общего php.ini, а если директива прописана у юзера, то именно она вступает в силу.
Буду признателен, если кто-нибудь подскажет, как это лучше сделать.
Собственно оно так и должно работать
Ваш скрипт должен копировать при генераци пользователю php.ini ваш основной конфиг.
И копировать его при каждом изменение в админке, плюс накладывать на него, банально тупо в самый низ его кастомные настройки, в таком случае так и будет происходить.
Если же вамнужно принудительно изменить всем настройки то вот я давно уже написал о этом на вики.
Спасибо за ответ. Может при создании пользователя и должен копироваться основной конфиг, но, как я говорил в вопросе, по умолчанию там появляются только две директивы и откуда они берутся - понять не могу. Возможно, что дело в ISPManager, но с ним я работаю впервые и еще не разобрался.
P.S. И забыл упомянуть одну вещь, которая на мой взгляд, тоже может влиять на ситуацию. По умолчанию была установлена какая-то древняя весрия PHP. Я сразу же обновил её до 5.4. Как обновлять через ISPManager - не знаю, посему сделал это по старинке из консоли. В общем, возможно, что ISPManager как-то не подружился с обновлением, хотя кеш я ему обнулял и в панели конфигурации версия PHP видна новая.
Исп кривой до безобразия но и он написан на php посмотрите генератор php.ini для клиентов и все станет понятно.
Так же вы не сообщиди о версии ОС
например в деб ветке php.ini штатно 4 штуки, и они все работают ;) в зависимости от вида представления php
Вы просто не обратили внимание. В самом начале я в двух словах написал: Centos 6.5. Можно добавить, что 64-х битная. Да, чувствую, что придётся рыться в этом ISP, как бы этого и не хотелось.
Когда php используется как модуль Apachе, настройки пользователям не нужны, они одинаковые для всех и берутся из основного файла php.ini.
Если перевести сайт на php как CGI, то настройки у пользователей появятся свои. Для того что бы включить режим php как CGI необходимо открыть свойства сайта через панель управления и там выбрать нужный режим php из списка режимов, разрешенных пользователям.