2009-07-17 3 views
1

De la même manière que vous pouvez générer un contenu spécifique en fonction du type de navigateur, existe-t-il un moyen de générer un contenu spécifique basé sur le serveur exécutant PHP sans référence au serveur ou au nom du site? Par exemple, un moyen pour PHP de détecter automatiquement l'environnement dans lequel il se trouvait et de configurer les choses comme les connexions DB, ini_set pour les erreurs etc. selon qu'il s'agissait d'un environnement de développement, ITS, UAT ou de production.Puis-je configurer un contenu spécifique à l'environnement?

Les 2 façons dont je pensais étaient de reconnaître un en-tête HTTP indiquant les environnements de développement et d'assurance qualité ou d'avoir des propriétés personnalisées dans php.ini. Je me suis réveillé un peu et j'ai découvert la fonction php pour lire les en-têtes HTTP, mais php remplace tout ce que j'ai défini dans le serveur web et je ne sais pas s'ils peuvent être définis dans php.ini.

Je ne sais pas s'il est possible d'ajouter des valeurs personnalisées à php.ini mais j'ai eu un test et ini_get ne le trouverait pas (j'ai redémarré le serveur web après avoir changé php.ini bien sûr).

+0

Je ne veux pas utiliser le nom du serveur car il peut y avoir un certain nombre de machines de développement, les noms de serveurs de QA peuvent changer etc. $ _ENV semblerait être le chemin à parcourir si je peux les configurer via IIS qui est ce que je dois travailler avec le serveur web. –

+0

Après quelques recherches je ne pouvais trouver aucun moyen d'ajouter des variables d'environnement avec ISAPI ainsi déplacé vers fastcgi (j'avais prévu cela de toute façon). J'ai suivi les instructions pour configurer fastcgiext.ini et ajouter des variables d'environnement et j'ai redémarré IIS mais $ _ENV est toujours vide. Comme note supplémentaire, notre configuration actuelle rompt l'une des règles cardinales du cycle de production en ce que les sites dev et ITS sont IIS 5, UAT est susceptible d'être IIS 6 et IIS production 7. J'espère que cela sera résolu bofore Il existe actuellement un site de production mais cela signifie que je suis actuellement limité à IIS 5. –

+0

$ _SERVER ['SERVER_NAME'] se base sur ce que le client appelant appelle le serveur, pas sur ce que le serveur lui-même est appelé. Si vous vous connectez par IP plutôt que par nom d'hôte, $ _SERVER ['SERVER_NAME'] sera l'adresse IP. Si vous définissez un autre nom dans votre fichier hosts, $ _SERVER ['SERVER_NAME'] sera celui, etc. Peut être utile à considérer. – Meep3D

Répondre

0

Utilisation de FastCGI sur I IS vous pouvez définir des variables d'environnement. Ils ne semblent pas être disponibles pour $ _ENV mais peuvent être récupérés avec getenv ("varname").

Pour configurer les variables d'environnement FastCGI dans IIS 5 ou 6 vous devez modifier: C: \% systemdrive% \ system32 \ inetsrv \ fcgiext.ini

Par exemple:

[Types] 
php=d:\Dev\PHP\php-cgi.exe 
php:1=PHP Site 1 
*=Wildcard Mapping 

[d:\Dev\PHP\php-cgi.exe] 
QueueLength=999 
MaxInstances=20 
InstanceMaxRequests=500 

[PHP Site 1] 
ExePath=d:\Dev\PHP\php-cgi.exe 
EnvironmentVars=PHPRC:d:\Dev\PHP\,SiteType:Developer 

Dans ce Par exemple, il s'agit d'IIS 5, il n'y a donc qu'un seul site et l'ID du site est 1 comme indiqué à la ligne 2 de [Types].

Sur IIS 6, vous pouvez avoir plusieurs sites et le lien suivant vous indique comment trouver l'ID de site: http://weblogs.asp.net/owscott/archive/2005/07/29/how-to-find-the-siteid-in-iis5-and-iis6.aspx.

IIS 7 peut être configuré via l'interface utilisateur apparemment une fois le module d'administration pour IIS 7 installé.

0

-je utiliser ce qui suit pour charger des paramètres différents pour différents serveurs:

switch ($_SERVER['SERVER_NAME']) { 
case 'web-host': case '10.0.0.208': 
    # Set DB Settings 
case 'mydomain.com': default: 
    # Live server settings 
} 

pas eu un problème avec elle jusqu'à

+0

Vous avez dit sans accès au serveur ou au nom du site - cela signifie-t-il que $ _SERVER ['SERVER_NAME'] n'est pas disponible? – Meep3D

4

vous pouvez spécifier une variable d'environnement apache (conf, vhost, .htaccess ou en tant que daem httpd), puis accès via le $ _ENVsuperglobal

+0

Votez pour vous. Je suis d'accord avec AlberT – DrFalk3n

0

Une autre alternative qui n'a pas encore été mentionnée serait de créer un fichier de configuration spécifique au serveur (mais avec le même nom) qui serait inclus au début du script de votre site. Dans ce fichier de configuration spécifique au serveur, vous pouvez définir des variables de configuration en tant que constantes. Ainsi, si un fichier de configuration «générique» était chargé plus tard, ses valeurs pourraient être remplacées dans le fichier de configuration spécifique au serveur car les constantes ne peuvent pas être redéfinies. Vous souhaitez soit exclure le nom de fichier de configuration spécifique au serveur des synchronisations, soit le conserver dans un chemin en dehors du contenu principal afin qu'il ne soit pas accidentellement remplacé. Pour cela, vous pouvez même configurer les tableaux constants à l'aide de Constant Array 2 class.Lorsque vous utilisez des fichiers de configuration spécifiques au serveur, vous n'avez pas à vous soucier du SERVER_NAME actuel: vous pouvez ainsi définir plus facilement l'environnement prévu, quel que soit le nom du système actuel, ce qui peut également s'avérer utile aux fins du contrôle qualité .

Questions connexes