Я установил EasyPHP WAMP только для локальной разработки (у меня нет веб-сайтов).
Есть ли способ установить пользовательские настройки php для отдельных виртуальных хостов?
В настоящее время и из-за коробки файл php.ini
загружается из: C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\binaries\php\php_runningversion\php.ini
Было бы неплохо, если бы, скажем, я мог бы php.ini
файл php.ini
каталог виртуального хоста, чтобы переопределить настройки в исходном php.ini
Таким образом, я мог бы лучше эмулировать среду производственного сервера для каждого сайта.
Я видел эту работу с онлайновыми учетными записями. Но я не могу понять, как это сделать на моей машине.
Использование пользовательских файлов php.ini
довольно сложно для PHP-установок на основе CGI / FastCGI, но это не представляется возможным при запуске PHP в качестве модуля Apache (mod_php), потому что весь сервер запускает один экземпляр интерпретатора PHP.
Мой совет:
Задайте из самого PHP столько настроек, сколько сможете:
ini_set('memory_limit', '16M'); date_default_timezone_set('Europe/Madrid') ...
Другими словами, директивы, которые можно изменить во время выполнения.
Задайте остальную часть материала из файлов настроек Apache для одного каталога (aka .htaccess
):
php_flag short_open_tag off php_value post_max_size 50M php_value upload_max_filesize 50M
т.е. настройки, которые должны быть определены до запуска скрипта
Для получения дополнительной информации см. Конфигурация времени выполнения .
Иногда вам понадобятся разные настройки в разработке и производстве. Есть бесконечные способы решить это с помощью PHP-кода (от создания логической константы из переменной $_SERVER['HTTP_HOST']
до просто наличия файла config.php
с разными значениями), но это сложнее с .htaccess
. Обычно я использую директиву <IfDefine>
:
<IfDefine DEV-BOX> # # Local server directives # SetEnv DEVELOPMENT "1" php_flag display_startup_errors on php_flag display_errors on php_flag log_errors off #php_value error_log ... </IfDefine> <IfDefine !DEV-BOX> # # Internet server directives # php_flag display_startup_errors off php_flag display_errors off php_flag log_errors on php_value error_log "/home/foo/log/php-error.log" </IfDefine>
… где DEV-BOX
– это строка, которую я передаю в локальную командную строку Apache:
C:\Apache24\bin\httpd.exe -D DEV-BOX
Если вы запускаете Apache как службу, бит -D DEV-BOX
может быть добавлен в реестр Windows, например:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Apache2.4\Parameters\ConfigArgs
Связано: Узнайте, как работает PHP на сервере (CGI OR fastCGI ИЛИ mod_php)
Простым способом использования пользовательского файла php.ini для vhost с использованием Fast CGI является копирование php.ini в папку на хосте, например «customini».
После этого к вашей директиве vhost и добавьте эту простую строку:
FcgidInitialEnv PHPRC "/path_to_your_custom_ini_dir_for_this_vhost/"
УБЕДИТЕСЬ, ЧТОБЫ ИДИТЕ /
к вашему пути нет \
, (он не будет работать с \
)
Перезапустите Apache.
Это все!
Полный образец (на Windows Server здесь):
<VirtualHost *:80> DocumentRoot "C:/APACHE/htdocs/vhost/myvhost" ServerName www.vhost.com FcgidInitialEnv PHPRC "C:/APACHE/customini/myvhost/" </VirtualHost>
Несколько комментаторов упоминают Вагранта, который является отличным решением.
Если вы не заинтересованы в использовании Vagrant, вы можете исследовать с помощью FastCGI в качестве вашего интерфейса к Apache и использовать предложение SetEnv PHPRC...
предложенное в этом блоге :
Apache & PHP: несколько файлов конфигурации PHP.ini (воскресенье, 8 февраля 2009 г.)
Источник: http://hyponiq.blogspot.com/2009/02/apache-php-multiple-phpini.html
Второй способ – использовать переменную среды PHPRC, настраиваемую в Apache, с помощью директивы SetEnv. Эта директива позволяет вам установить переменную среды, которая затем передается на любой скрипт CGI и / или Server Side Include (SSI), установленный на любой статической (x) HTML-странице (или другом типе документа). В этом случае вы сообщаете каждому экземпляру PHP-CGI, где находите его параметры конфигурации. Пример будет (совпадающий с предыдущим):
# vhosts.conf NameVirtualHost *:81 <VirtualHost *:81> ServerAdmin admin@example.com ServerName vhost.example.com DocumentRoot "C:/path/to/doc/root" ErrorLog "logs/vhost.example.com-errors.log" # Set the PHPRC environment variable SetEnv PHPRC "C:/path/to/doc/root/php.ini" <Directory "C:/path/to/doc/root"> # ... yadda, yadda, yadda ... # you get the point! </Directory> </VirtualHost>
Однако документация PHP, изменяющая конфигурацию среды выполнения , позволяет использовать определенные значения, такие как
php_value
чтобы попробовать loaalong с, возможно, директивойSetEnv
.
Он предлагает другой вариант, не использующий FastCGI, вместо использования параметров конфигурации php_value
, php_flag
и т. Д.
У других, похоже, был некоторый успех при выполнении скриптов через FastCGI, но см. Раздел : Разделить php.ini для разных виртуальных хостов
Другие предложения включают директиву PHPINI
, которая может быть уместна для ваших нужд: см. PHPINI
Как ограничить PHP-приложения своими собственными каталогами и их собственным php.ini?