Я пытаюсь автоматизировать подготовку сервера Windows 2012, но мне не удается заставить PHP работать.
Это команда, которую я использую для добавления сопоставления обработчика в IIS:
New-WebHandler -Name "PHP-FastCGI" -Path "*.php" -Verb "*" -Modules "FastCgiModule" -ScriptProcessor "c:\php\php-cgi.exe" -ResourceType File
Это правильно добавляет отображение обработчика, пока все хорошо.
Однако мне все еще нужно вручную создать приложение FastCGI для исполняемого файла, чтобы он работал. Какая команда PowerShell позволяет это автоматизировать? Я не могу найти ничего, что указывало бы мне в правильном направлении.
Я работал над той же проблемой. Этот сценарий обновит конфигурацию вашего apphost, чтобы создать как пул процессов FastCGI, так и сопоставление обработчиков.
import-module WebAdministration
###############################################################
# Adds a FastCGI process pool in IIS
###############################################################
$php = 'C:\php\php-cgi.exe'
$configPath = get-webconfiguration 'system.webServer/fastcgi/application' | where-object { $_.fullPath -eq $php }
if (!$configPath) {
add-webconfiguration 'system.webserver/fastcgi' -value @{'fullPath' = $php }
}
###############################################################
# Create IIS handler mapping for handling PHP requests
###############################################################
$handlerName = "PHP 7.0.12"
$handler = get-webconfiguration 'system.webserver/handlers/add' | where-object { $_.Name -eq $handlerName }
if (!$handler) {
add-webconfiguration 'system.webServer/handlers' -Value @{
Name = $handlerName;
Path = "*.php";
Verb = "*";
Modules = "FastCgiModule";
scriptProcessor=$php;
resourceType='Either'
}
}
###############################################################
# Configure the FastCGI Setting
###############################################################
# Set the max request environment variable for PHP
$configPath = "system.webServer/fastCgi/application[@fullPath='$php']/environmentVariables/environmentVariable"
$config = Get-WebConfiguration $configPath
if (!$config) {
$configPath = "system.webServer/fastCgi/application[@fullPath='$php']/environmentVariables"
Add-WebConfiguration $configPath -Value @{ 'Name' = 'PHP_FCGI_MAX_REQUESTS'; Value = 10050 }
}
# Configure the settings
# Available settings:
# instanceMaxRequests, monitorChangesTo, stderrMode, signalBeforeTerminateSeconds
# activityTimeout, requestTimeout, queueLength, rapidFailsPerMinute,
# flushNamedPipe, protocol
$configPath = "system.webServer/fastCgi/application[@fullPath='$php']"
Set-WebConfigurationProperty $configPath -Name instanceMaxRequests -Value 10000
Set-WebConfigurationProperty $configPath -Name monitorChangesTo -Value 'C:\php\php.ini'
# Restart IIS to load new configs.
invoke-command -scriptblock {iisreset /restart }