Один из клиентов запросил персональную конфигурацию 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
в указанный каталог только для этого виртуального хоста.