2016-07-21 7 views
1

Ich habe IIS 7.0 und zwei Versionen PHP v5 und v7 auf meinem Microsoft Windows Server 2008 Standard 6.0 SP2. Das Problem ist, dass PHP7 oder IIS versucht, die php.ini von PHP5 für IIS "Websites" zu verwenden.Wie setze ich den php.ini Pfad für PHP CGI/FastCGI SAPI auf Windows Server 2008 R2?

So auf der Kommandozeile ist alles in Ordnung:

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) 

Aber im IIS-Manager und in der phpinfo() Ausgang nicht:

IIS-website-PHP-setting

phpinfo-version-sapi-php-ini

denke ich, es ist ein PHP (cgi-fcgi SAPI) Problem, nicht ein IIS-Problem (aber nicht sicher).

Wie setzt man die richtige php.ini für PHP CGI/FastCGI SAPI auf Windows Server 2008?


auch versucht, es über die Registry, aber das hat nicht geholfen:

registry-php-IniFilePath

+0

Ich weiß, dass ich mit einer ähnlichen Situation auf * Linux, * unter * Apache, * aber ich frage mich, ob die gleiche Art von Ansatz hier verwendet werden könnte. Im Grunde genommen habe ich zwei separate "CGI-Dateien" erstellt, von denen jede im Wesentlichen wie folgt abläuft: 'exec/pfad/zu/php-cgi --php-ini /pfad/zu/php.ini $ PATH_TRANSLATED'. Das heißt, die Befehlsdatei ruft explizit einen PHP-Interpreter auf und teilt ihm ausdrücklich mit, welche php.ini-Datei verwendet werden soll. Es scheint mir intuitiv, dass hier ein ähnlicher Ansatz gefunden werden könnte. . . (Und, PS .: "Ich denke, es ist auch' cgi-fcgi'. ") –

+0

Ich erwäge meinen vorherigen Kommentar in Bezug auf dieses * FastCGI * (unabhängig von der Host-Umgebung ...), Weiß ich, dass es möglich ist, "separate * Pools * von FastCGI-Arbeiterbienen" zu bezeichnen und eingehende Anfragen an die entsprechenden zu richten. Sie sollten in der Lage sein, zwei Pools einzurichten: einen für PHP5, den anderen für PHP7. . . Ich wünschte, ich könnte genauer sein, aber ich habe in letzter Zeit kein von Windows gehostetes Projekt gemacht. –

+0

@MikeRobinson Danke, dass du versucht hast, auch in dieser Frage zu helfen! Aber noch einmal: Das Problem ist nicht, dass die falsche PHP-Version (oder in diesem Fall die falsche 'php-cgi.exe') verwendet wird. Das Problem ist, dass irgendwo konfiguriert ist, dass 'D: \ Pfad \ zu \ php7 \ php-cgi.exe' seine Configs von' D: \ Pfad \ zu \ php5 \ php.ini' (statt ' D: \ Pfad \ zu \ php7 \ php.ini'). Also muss ich herausfinden, warum es so seltsam konfiguriert ist und wie man das ändert. – automatix

Antwort

2

Die solution von Jan Reilink auch richtig scheint, aber leider konnte ich nicht herausfinden, wie es den richtigen Weg anzuwenden (this und andere von mir unter Jans Antwort).

Schließlich habe ich es den IIS-GUI gelöst über:

IIS GUI -> FastCGI Settings

Und dann FastCGI Settings -> EnvironmentVariables -> PHPRC:

IIS-FastCGI-Settings-EnvironmentVariables-PHPRC

Siehe auch "Configure IIS to Handle PHP Requests" im Kapitel „FastCGI Verwendung von Host PHP-Anwendungen auf IIS 7 "der IIS-Dokumentation.

1

Sie müssen Umgebungsvariablen in Ihrer FastCGI-Konfiguration setzen mehrere PHP-Versionen in IIS zu hosten. Diejenige, die Sie wollen, ist 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 

(beachten Sie die -c Argument auch)

und das gleiche für PHP 7 und den Pfad ändern. Ich habe dies und mehr in meinem Blogpost https://www.saotn.org/php-wincache-on-iis/ erklärt.

+0

Vielen Dank für Ihre Antwort! Ja, das Problem scheint hier zu sein. Ich habe einen anderen Windows Server, wo zwei PHP-Versionen gut funktionieren und der Unterschied zwischen diesen Maschinen ist: 'C: \ ... \ appcmd list config':' ...' vs. ' ...'. – automatix

+0

Aber wenn ich versuche 'C: \ ... \ appcmd set config /section:system.webServer/fastCgi /[fullPath='D:\Data\Programme\php7\php-cgi.exe'].environmentVariables.[name = 'PHPRC', Wert = 'D: \ Data \ Programme \ php7 \']/commit: apphost' Ich erhalte einen Fehler: 'FEHLER (Meldung: SITE-Objekt mit dem Bezeichner" value = 'D: \ Data \ Program nicht gefunden \ php7 \ '] ".)'. Warum? – automatix

+0

Wenn ich die Leerzeichen zwischen 'name = 'PHPRC',' und 'value = 'D: \ Data \ Programme \ php7 \'' ('C: \ ... \ appcmd set config /section:system.webServer/ fastCgi /[fullPath='D:\Data\Programme\php7\php-cgi.exe ']. environmentVariables. [Name =' PHPRC ', Wert =' D: \ Data \ Program \ php7 \ ']/commit: apphost '), Bekomme ich einen anderen Fehler:' ERROR (Nachricht: Kann angeforderte Sammlung Element nicht finden.) '. – automatix

Verwandte Themen