Назад | Перейти на главную страницу

Пользовательский параметр PHPINIDir в VirtualHost, влияющий на другие VirtualHosts

Один из клиентов запросил персональную конфигурацию php.ini для своего веб-сайта, поэтому я установил его VirtualHost следующим образом:

<VirtualHost *:80>
    DocumentRoot "/home/alex/www.domain.tld"
    ServerName www.domain.tld
    AssignUserID alex alex
    PHPINIDir /home/alex/php.ini
</VirtualHost>

Клиент создал файл php.ini в / home / alex /, который содержит только этот параметр:

session.save_path = "/home/alex/.php_sessions/"

После того, как это было сделано, он начал жаловаться, что видит все остальные файлы сеанса, созданные на сайтах других клиентов.

После выполнения некоторых основных действий по устранению неполадок я понял, что его настройки php.ini влияют на все веб-сайты, указанные в httpd-vhosts.conf.

Вопрос почему? поскольку PHPINIDir указывается только внутри одного конкретного VirtualHost?

Отдельные виртуальные хосты не могут иметь свои собственные PHPINIDir поскольку php.ini файл читается при запуске apache + mod_php, еще до того, как он начнет обрабатывать запросы. По какой-то причине, вместо предупреждения при таком использовании, эта директива установит глобальный каталог INI и продолжит свой веселый путь.

Вместо этого вы должны использовать php_value, php_flag, php_admin_value и php_admin_flag Директивы Apache для переопределения конкретных настроек, которые вы хотите использовать для этого виртуального хоста. (Видеть Вот) В этом случае вы бы сделали:

<VirtualHost *:80>
    DocumentRoot "/home/alex/www.domain.tld"
    ServerName www.domain.tld
    AssignUserID alex alex
    php_value session.save_path "/home/alex/.php_sessions/"
</VirtualHost>

В этом случае он загрузит значение по умолчанию php.ini файл, затем измените session.save_path в указанный каталог только для этого виртуального хоста.