2016-07-21 9 views
1

У меня IIS 7.0 и две версии PHP v5 и v7 на моем Microsoft Windows Server 2008 Standard 6.0 с пакетом обновления 2 (SP2). Проблема в том, что PHP7 или IIS пытается использовать php.ini PHP5 для «веб-сайтов» IIS.Как установить путь php.ini для PHP CGI/FastCGI SAPI на Windows Server 2008 r2?

Так в командной строке все в порядке:

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) 

Но в диспетчере IIS и в phpinfo() выход: не

IIS-website-PHP-setting

phpinfo-version-sapi-php-ini

Я думаю, это PHP (cgi-fcgi SAPI) выпуск, не проблема IIS (но не уверен).

Как установить правильный php.ini для PHP CGI/FastCGI SAPI на Windows Server 2008?


Также попробовал через реестр, но это не помогло:

registry-php-IniFilePath

+0

Я знаю, что мне приходилось иметь дело с аналогичной ситуацией на * Linux, * под * Apache, *, но мне интересно, можно ли использовать такой же подход. В принципе, я создал два отдельных «CGI-файла», каждый из которых в основном сводится к: 'exec/path/to/php-cgi -php-ini /path/to/php.ini $ PATH_TRANSLATED'. Другими словами, командный файл явно вызывает интерпретатор PHP и, в частности, сообщает ему, какой файл 'php.ini' использовать. Мне кажется интуитивно, что подобный подход можно было бы приготовить здесь. , , (И, P.S .: «Я думаю, что это тоже« cgi-fcgi ».) –

+0

Размышление над моим предыдущим комментарием в отношении этого * FastCGI * (независимо от среды хоста ...), Я знаю, что можно назначить «отдельные * пулы» рабочих пчел FastCGI »и направлять входящие запросы на соответствующий. Вы должны как-то настроить два пула: один для PHP5, другой для PHP7. , , Хотел бы я быть более конкретным, но в последнее время я не делал проект с Windows. –

+0

@MikeRobinson Спасибо за помощь в этом вопросе! Но еще раз: проблема не в том, что используется неправильная версия PHP (или в этом случае неправильный 'php-cgi.exe'). Проблема в том, что где-то настроено, что 'D: \ path \ to \ php7 \ php-cgi.exe' должен получить свои конфиги с' D: \ path \ to \ php5 \ php.ini' (вместо ' D: \ путь \ к \ php7 \ php.ini'). Поэтому я должен выяснить, почему он настроен таким странным образом и как это изменить. – automatix

ответ

2

solution из Jan Reilink кажется тоже правильно, но, к сожалению, я не мог узнать, как применить это правильный путь (см this и другие мои комментарии ниже ответа Яна).

Наконец я получил его решить через графический интерфейс пользователя IIS:

IIS GUI -> FastCGI Settings

А потом FastCGI Settings -> EnvironmentVariables -> PHPRC:

IIS-FastCGI-Settings-EnvironmentVariables-PHPRC

Смотрите также "Configure IIS to Handle PHP Requests" в главе «Использование FastCGI для хоста Приложения PHP на IIS 7 "документации IIS.

1

Вам необходимо установить переменные окружения в конфигурации FastCGI для размещения нескольких версий PHP в IIS. Один вы хотите 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 

(обратите внимание на -c аргумент, а)

и сделать то же самое для PHP 7 и изменить путь. У меня это и многое другое объясняется в моем сообщении в блоге https://www.saotn.org/php-wincache-on-iis/.

+0

Спасибо за ваш ответ! Да, проблема, кажется, здесь. У меня есть другой Windows Server, где две версии PHP работают хорошо, и разница между этими машинами: 'C: \ ... \ appcmd list config':' ...' vs. ' ...'. – automatix

+0

Но когда я пытаюсь 'C: \ ... \ appcmd установить config /section:system.webServer/fastCgi /[fullPath='D:\Data\Programme\php7\php-cgi.exe'].environmentVariables.[name = 'PHPRC', value = 'D: \ Data \ Program \ php7 \']/commit: apphost' Я получаю сообщение об ошибке: 'ERROR (сообщение: не удается найти объект SITE с идентификатором" value = 'D: \ Data \ Program \ php7 \ '] ".)'. Зачем? – automatix

+0

Когда я удаляю пробелы между 'name = 'PHPRC',' и 'value = 'D: \ Data \ Program \ php7 \'' ('C: \ ... \ appcmd set config /section:system.webServer/ fastCgi /[fullPath='D:\Data\Programme\php7\php-cgi.exe ']. environmentVariables. [name =' PHPRC ', value =' D: \ Data \ Program \ php7 \ ']/commit: apphost '), Я получаю еще одну ошибку:' ERROR (сообщение: Не удается найти запрошенный элемент коллекции.) '. – automatix