Как создать пользовательские файлы php.ini для каждого виртуального хоста?

Я установил 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 Таким образом, я мог бы лучше эмулировать среду производственного сервера для каждого сайта.

Я видел эту работу с онлайновыми учетными записями. Но я не могу понять, как это сделать на моей машине.

Solutions Collecting From Web of "Как создать пользовательские файлы 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?