J'ai installé EasyPHP WAMP uniquement pour le développement local (je n'héberge aucun site Web).
Est-il possible de définir des paramètres php personnalisés pour des hôtes virtuels distincts?
Le fichier php.ini
est chargé depuis: C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\binaries\php\php_runningversion\php.ini
. Ce serait bien si, par exemple, je pouvais déposer un fichier php.ini
personnalisé dans le répertoire de l'hôte virtuel pour remplacer les paramètres du php.ini
original pourrait mieux émuler l'environnement d'un serveur de production site par site.
J'ai vu ce travail avec des comptes d'hébergement en ligne. Mais je n'arrive pas à comprendre comment faire fonctionner cela sur ma machine.
L’utilisation de fichiers php.ini
personnalisés est assez simple pour les installations PHP basées sur CGI/FastCGI, mais elle n’est pas réalisable lorsque vous exécutez PHP en tant que module Apache (mod_php) car le serveur entier exécute une instance unique de l'interprète PHP.
Mon conseil:
Définissez à partir de PHP lui-même autant de paramètres que possible:
ini_set('memory_limit', '16M');
date_default_timezone_set('Europe/Madrid')
...
En d'autres termes, les directives peuvent être modifiées lors de l'exécution.
Définissez le reste des éléments à partir des fichiers de paramètres Apache par répertoire (alias .htaccess
):
php_flag short_open_tag off
php_value post_max_size 50M
php_value upload_max_filesize 50M
c'est-à-dire, les paramètres qui doivent être définis avant que le script ne commence à s'exécuter
Veuillez consulter la Configuration du runtime pour plus de détails.
Parfois, vous aurez réellement besoin de différent dans les paramètres de développement et de production. Il existe d'innombrables façons de résoudre ce problème avec le code PHP (de la création d'une constante booléenne à partir de la variable $_SERVER['HTTP_Host']
à la création d'un fichier config.php
avec des valeurs différentes), mais c'est plus compliqué avec .htaccess
. J'utilise normalement la directive <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>
... où DEV-BOX
est une chaîne que je passe à la ligne de commande Apache locale:
C:\Apache24\bin\httpd.exe -D DEV-BOX
Si vous exécutez Apache en tant que service, le bit -D DEV-BOX
peut être ajouté dans le registre Windows, par exemple:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Apache2.4\Parameters\ConfigArgs
Lié: Découvrez comment PHP fonctionne sur le serveur (CGI OR fastCGI OR mod_php)
Une façon simple d'utiliser un fichier php.ini personnalisé pour vhost en utilisant Fast CGI consiste à copier le fichier php.ini dans un dossier de l'hôte tel que "customini".
Après cela, passez à votre directive vhost et ajoutez cette simple ligne:
FcgidInitialEnv PHPRC "/path_to_your_custom_ini_dir_for_this_vhost/"
SOYEZ SÛR D'AVOIR /
dans votre chemin no \
, (cela ne fonctionnera pas avec \
)
Redémarrez Apache.
C'est tout!
Exemple complet (sur Windows Server ici):
<VirtualHost *:80>
DocumentRoot "C:/Apache/htdocs/vhost/myvhost"
ServerName www.vhost.com
FcgidInitialEnv PHPRC "C:/Apache/customini/myvhost/"
</VirtualHost>
Incorporer les paramètres php.ini dans le httpd-vhost.conf
, qui se trouve généralement à la racine du serveur sous conf/extra/
, est un excellent moyen de résoudre ce problème courant. Si vous ne saviez jamais que vous pouviez le faire, consultez le manuel PHP.net, sous Comment modifier les paramètres de configuration . Cela résoudra le problème embêtant include_path
, sans ajouter de code de configuration à votre code d'amorçage ni quoi que ce soit d'autre.
Bien sûr, pour utiliser ceci efficacement en tant que localhost , il vous faudrait faire des copies d’un bloc <VirualHost>
et les configurer en conséquence. Puis commentez tous les blocs d'hôte virtuel sauf celui que vous voulez utiliser!
Alternativement, vous pouvez démarrer Apache avec l'option -f
pour pointer le démon du serveur vers un httpd.conf
différent lors du démarrage. Chaque httpd.conf
nécessiterait un bloc "if module", tel que `block. N'oubliez pas de tenir compte de la journalisation Apache!
httpd -f /usr/local/Apache2/conf/domains/fooDomain.conf
httpd -f /usr/local/Apache2/conf/domains/barDomain.conf
php.ini
.<VirtualHost 127.0.0.1:80>
UseCanonicalName On
ServerName localhost:80
ServerAdmin you@localhost
CustomLog "/var/www/someDomain.com/data/logs/httpd_access_log" common
ErrorLog "/var/www/someDomain.com/data/logs/httpd_error_log"
LogLevel warn
DocumentRoot "/var/www/someDomain.com/public"
<Directory "/var/www/someDomain.com/public">
# disable directory listing
Options -Indexes +FollowSymLinks
AllowOverride FileInfo
Require all granted
</Directory>
<IfModule alias_module>
# Alias /webpath /full/filesystem/path
ScriptAlias /cgi-bin/ "/var/www/someDomain.com/scripts/cgi-bin/"
</IfModule>
<IfModule php5_module>
# Use php7_module in opening statement above if on PHP 7+
# Domain specific PHP configuration options.
# The Apache process user must own any of the following directories.
php_admin_value include_path "/var/www/someDomain.com/application/controllers:/var/www/someDomain.com/application/models:/var/www/someDomain.com/application/views"
# Errors and Logging
php_admin_flag display_startup_errors off
php_admin_flag display_errors off
php_admin_flag html_errors off
php_admin_flag log_errors on
php_admin_value error_log "/var/www/someDomain.com/data/logs/php_error_log"
# File Related
php_admin_flag file_uploads on
php_admin_value upload_tmp_dir "/var/www/someDomain.com/data/uploads"
php_admin_value upload_max_filesize 10M
php_admin_value max_file_uploads 5
# Sessions
php_value session.save_handler "files"
php_value session.save_path "/var/www/someDomain.com/data/sessions"
# Caching
php_value soap.wsdl_cache_dir "/var/www/someDomain.com/data/cache/sopa.wsdl"
</IfModule>
</VirtualHost>
Si vous pouviez utiliser la variable% {SERVER_NAME} avec le <IfModule phpx_module> blocks to form a compound conditional, you could have just one
httpd.conf`, ou inclure un extra/php.conf avec tous les paramètres PHP.ini spécifiques au domaine (également en blocs). Cependant, tant que "localhost" est la cible du domaine, il ne fera pas ce que vous voulez. Ainsi, ma réponse dans le bloc hôte virtuel ci-dessus.
Plusieurs commentateurs ont mentionné Vagrant qui est une excellente solution.
Si vous n'êtes pas intéressé par Vagrant, vous pouvez utiliser FastCGI comme interface vers Apache et utiliser la suggestion SetEnv PHPRC...
proposée sur ce blog _:
Apache et PHP: plusieurs fichiers de configuration PHP.ini (dimanche 8 février 2009)
Source: http://hyponiq.blogspot.com/2009/02/Apache-php-multiple-phpini.html }
La deuxième solution consiste à utiliser la variable d'environnement PHPRC configurable dans Apache à l'aide de la directive SetEnv. Cette directive vous permet de définir une variable d'environnement qui est ensuite transmise à tout script CGI et/ou SSI (Server Side Include) défini dans une page HTML statique (x) (ou un autre type de document). Dans ce cas, vous diriez à chaque instance PHP-CGI où trouver ses paramètres de configuration. L'exemple serait (coïncidant avec le précédent):
# vhosts.conf NameVirtualHost *:81 <VirtualHost *:81> ServerAdmin [email protected] 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>
Cependant, la PHP documentation modification de la configuration d'exécution suggère que vous pouvez utiliser certaines valeurs telles que
php_value
pour essayer de lire long, éventuellement avec la directiveSetEnv
.
Il suggère une autre option n'utilisant pas FastCGI, utilisant plutôt les options de configuration php_value
, php_flag
etc.
D'autres semblent avoir eu un certain succès avec l'exécution de scripts via FastCGI, voir: Séparez php.ini pour différents hôtes virtuels
D'autres suggestions concernent la directive PHPINI
, qui peut être pertinente pour vos besoins, voir: Comment puis-je limiter les applications PHP à leurs propres répertoires et à leur propre php.ini?