一台云服务器Windows篇:08、php

在Nginx环境下,安装php 8.3.13与xxfpm。

安装

PHP当前支持版本:Supported Versions,历史版本:PHP: Unsupported Branches

前提:windows 上 nginx 运行正常,vc++ 14.0运行库已安装。

  1. 下载vc++ 14.0运行库:Latest supported Visual C++ Redistributable downloads | Microsoft Learn
  2. 下载php NTS(Non Thread Safe)版:PHP For Windows: Binaries and sources Releases,TS版本是给IIS用的。
    • 解压,并将路径添加到系统环境变量php_home里。比如:%php_home%=C:\php
  3. 将 C:\php\php.ini-production 改名为 C:\php\php.ini,并编辑移除二行的注释符
extension_dir = "ext"
cgi.fix_pathinfo=1
  1. 创建php启动快捷方式,并执行。
    • 注意:没有任何反应,不能关闭这个窗口。
    • 把这个快捷方式放到用户自启动目录
%windir%\system32\cmd.exe /K C:\php\php-cgi.exe -b 127.0.0.1:9000 -c C:\php\php.ini
  1. 配置 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;
        }
  1. 在 Nginx\html 创建 phpinfo.php 文件,内容为:
<?php phpinfo(); ?>
  1. 浏览器中访问 y.z/phpinfo.php 检查php是否正常运行。

解决php-cgi.exe自动关闭,及随nginx bat一起启动

用下面内容的bat,取代上面第4步的快捷方式:用到了 xxfpmRunHiddenConsole

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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注