安装
PHP当前支持版本:Supported Versions,历史版本:PHP: Unsupported Branches
前提:windows 上 nginx 运行正常,vc++ 14.0运行库已安装。
- 下载vc++ 14.0运行库:Latest supported Visual C++ Redistributable downloads | Microsoft Learn
- vc++ 2015-2022 Redistributable x64: https://aka.ms/vs/17/release/vc_redist.x64.exe
- 下载php NTS(Non Thread Safe)版:PHP For Windows: Binaries and sources Releases,TS版本是给IIS用的。
- 解压,并将路径添加到系统环境变量php_home里。比如:%php_home%=C:\php
- 将 C:\php\php.ini-production 改名为 C:\php\php.ini,并编辑移除二行的注释符
extension_dir = "ext"
cgi.fix_pathinfo=1
- 创建php启动快捷方式,并执行。
- 注意:没有任何反应,不能关闭这个窗口。
- 把这个快捷方式放到用户自启动目录
%windir%\system32\cmd.exe /K C:\php\php-cgi.exe -b 127.0.0.1:9000 -c C:\php\php.ini
- 配置 Nginx
- 重新加载 Nginx 配置,在CMD中执行:nginx.exe -s reload
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
- 在 Nginx\html 创建 phpinfo.php 文件,内容为:
<?php phpinfo(); ?>
- 浏览器中访问 y.z/phpinfo.php 检查php是否正常运行。

解决php-cgi.exe自动关闭,及随nginx bat一起启动
用下面内容的bat,取代上面第4步的快捷方式:用到了 xxfpm 和 RunHiddenConsole 。
REM 每个php-cgi进程处理的最大请求数,到上限进程自动重启,用于内存回收;或设置为 Windows 环境变量。
set PHP_FCGI_MAX_REQUESTS=1000
REM -n 5 启动5个php-cgi.exe进程,-p 9000 运行在9000端口上。
%~dp0RunHiddenConsole.exe %~dp0xxfpm.exe "%php_home%/php-cgi.exe -c %php_home%/php.ini" -n 5 -i 127.0.0.1 -p 9000
启动之后,就会有5个php-cgi,1个xxfpm的进程;关闭xxfpm进程会自动关闭php-cgi,反过来,只要xxfpm没有关闭,会一直保持有5个php-cg进程在运行中。
Nginx 开机自启动bat:
@echo off
REM bat与nginx.exe同目录
set mode=start
goto %mode%
:start
echo Stop Nginx...
start /d %~dp0 %~dp0nginx.exe -s stop
ping -n 5 127.0.0.1 > nul
taskkill /f /FI "IMAGENAME eq nginx.exe"
taskkill /f /FI "IMAGENAME eq xxfpm.exe"
echo Starting PHP FastCGI...
rem call %~dp0xxfpm\xxfpm.bat
set php_home=C:/webEnvironment/php
rem 每个进程处理的最大请求数,或设置为 Windows 环境变量
set PHP_FCGI_MAX_REQUESTS=1000
%~dp0xxfpm\RunHiddenConsole.exe %~dp0xxfpm\xxfpm.exe "%php_home%/php-cgi.exe -c %php_home%/php.ini" -n 2 -i 127.0.0.1 -p 9000
echo Starting Nginx...
start /d %~dp0 %~dp0nginx.exe
ping -n 5 127.0.0.1 > nul
echo.>>%~dpn0.log
echo %date% %time% >>%~dpn0.log
tasklist /FI "IMAGENAME eq nginx.exe">>%~dpn0.log
tasklist /FI "IMAGENAME eq xxfpm.exe">>%~dpn0.log
tasklist /FI "IMAGENAME eq php-cgi.exe">>%~dpn0.log
goto end
:stop
:end
发表回复