2016-07-21 2 views
1

J'ai IIS 7.0 et deux versions PHP v5 et v7 sur mon Microsoft Windows Server 2008 Standard 6.0 SP2. Le problème est que PHP7 ou IIS essaie d'utiliser le php.ini de PHP5 pour les "sites" IIS.Comment configurer le chemin php.ini pour PHP CGI/FastCGI SAPI sur Windows Server 2008 R2?

Ainsi, sur la ligne de commande tout va bien:

X:\>php -v 
PHP 7.0.2 (cli) (built: Jan 6 2016 12:59:59) (NTS) 
Copyright (c) 1997-2015 The PHP Group 
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies 

X:\>php --ini 
Configuration File (php.ini) Path: C:\Windows 
Loaded Configuration File:   D:\Data\Programme\php7\php.ini 
Scan for additional .ini files in: (none) 
Additional .ini files parsed:  (none) 

Mais dans le Gestionnaire des services Internet et dans la sortie phpinfo() pas:

IIS-website-PHP-setting

phpinfo-version-sapi-php-ini

Je pense, il est un problème PHP (cgi-fcgi SAPI), pas un problème IIS (mais pas sûr).

Comment définir le bon php.ini pour PHP CGI/FastCGI SAPI sur Windows Server 2008?


également essayé au-dessus du registre, mais cela n'a pas aidé:

registry-php-IniFilePath

+0

Je sais que j'ai dû faire face à une situation similaire sur * Linux, * sous * Apache, * mais je me demande si le même type d'approche pourrait être utilisé ici. Fondamentalement, j'ai créé deux "fichiers CGI" séparés, dont chacun se résume à: 'exec/chemin/vers/php-cgi --php-ini /path/to/php.ini $ PATH_TRANSLATED'. C'est-à-dire que le fichier de commande appelle explicitement un interpréteur PHP et lui indique spécifiquement quel fichier 'php.ini' utiliser. Il me semble intuitivement qu'une approche similaire pourrait être élaborée ici. . . (Et, P.S .: "Je pense que c'est aussi" cgi-fcgi ".) –

+0

Réfléchissant mon commentaire précédent en ce qui concerne ce soit * FastCGI * (indépendamment de l'environnement hôte ...), Je sais qu'il est possible de désigner des «bassins séparés * de travailleurs-abeilles FastCGI» et de diriger les demandes entrantes vers les demandes appropriées. Vous devriez pouvoir mettre en place deux pools: un pour PHP5, l'autre pour PHP7. . . J'aimerais pouvoir être plus précis, mais je n'ai pas fait de projet hébergé par Windows dernièrement. –

+0

@MikeRobinson Merci d'essayer d'aider dans cette question aussi! Mais encore une fois: Le problème n'est pas, que la mauvaise version de PHP (ou dans ce cas le mauvais «php-cgi.exe») est utilisé. Le problème est que quelque part est configuré, que 'D: \ path \ to \ php7 \ php-cgi.exe' doit obtenir ses configs de' D: \ path \ to \ php5 \ php.ini' (au lieu de ' D: \ chemin \ vers \ php7 \ php.ini'). Je dois donc découvrir pourquoi il est configuré de manière si étrange et comment changer cela. – automatix

Répondre

2

Le solution de Jan Reilink semble aussi correcte, mais malheureusement je ne pouvais pas savoir, comment appliquer le droit chemin (voir this et mes autres commentaires ci-dessous la réponse de Jan).

Enfin je l'ai eu résolu sur l'interface IIS:

IIS GUI -> FastCGI Settings

Et puis FastCGI Settings -> EnvironmentVariables -> PHPRC:

IIS-FastCGI-Settings-EnvironmentVariables-PHPRC

Voir aussi "Configure IIS to Handle PHP Requests" dans le chapitre « Utilisation FastCGI à l'hôte Applications PHP sur IIS 7 "de la documentation IIS.

1

Vous devez définir des variables d'environnement dans votre configuration FastCGI pour héberger plusieurs versions de PHP dans IIS. Celui que vous voulez est PHPRC:

AppCmd set config -section:system.webServer/fastCgi 
    /+"[fullPath='c:\php5\php-cgi.exe', arguments='-c 
    c:\php5\php.ini'].environmentVariables. 
    [name='PHPRC',value='c:\php5\php.ini']" /commit:apphost 

(notez l'argument -c ainsi)

et faire la même chose pour PHP 7, et changer le chemin. J'ai ceci, et plus, expliqué dans mon article de blog https://www.saotn.org/php-wincache-on-iis/.

+0

Merci pour votre réponse! Oui, le problème semble être ici. J'ai un autre Windows Server, où deux versions de PHP fonctionnent bien et la différence entre ces machines est: 'C: \ ... \ appcmd list config':' ...' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' \ Programme \ php7 \ php-cgi.exe "..." ... '. – automatix

+0

Mais quand j'essaie 'C: \ ... \ appcmd set config /section:system.webServer/fastCgi /[fullPath='D:\Data\Programme\php7\php-cgi.exe'].environmentVariables.[name = 'PHPRC', valeur = 'D: \ Data \ Program \ php7 \']/commit: apphost' J'ai une erreur: 'ERROR (message: Impossible de trouver l'objet SITE avec l'identifiant" value = 'D: \ Data \ Program \ php7 \ '] ".)'. Pourquoi? – automatix

+0

Lorsque je supprime les espaces entre 'name = 'PHPRC',' et 'value = 'D: \ Data \ Program \ php7 \'' ('C: \ ... \ appcmd set config /section:system.webServer/ fastCgi /[fullPath='D:\Data\Programme\php7\php-cgi.exe ']. environmentVariables. [name =' PHPRC ', valeur =' D: \ Data \ Program \ php7 \ ']/commit: apphost '), Je reçois une autre erreur:' ERROR (message: Impossible de trouver l'élément de collection demandé.) '. – automatix