安装PHP
通过scoop安装
# 添加库
scoop bucket add main
## 由于默认从git上下载库,可能下载不下来,这里把github的库导入到gitee,引用第三方库的方式
scoop bucket add main https://gitee.com/wk-zys/Main.git
# 安装,可以并存多个不同版本的php
scoop install php71 php81
# 切换php环境,注意切换后可能不生效或者其他路径错误,需要重启下终端窗口
scoop reset php74
scoop reset php81
运行php-cgi
# -c 参数需要指定配置文件的实际路径
php-cgi.exe -b 127.0.0.1:9000 -c ./php.ini -c ./extensions.ini
直接运行php-cgi中途可能会遇到异常退出
可以使用进程管理来管理php-cgi进程,如:xxfpm
进程管理器 xxfpm
安装
git clone https://github.com/78/xxfpm
# 把./xxfpm/bin 目录加入环境变量
使用
xxfpm -h
# -n, --number number of processes to keep
# -i, --ip ip address to bind
# -p, --port port to bind, default is 8000
# -u, --user start processes using specified linux user
# -g, --group start processes using specified linux group
# -r, --root change root direcotry for the processes
# -h, --help output usage information and exit
# -v, --version output version information and exit
# 创建5个php-cgi进程
xxfpm ./php-cgi.exe -n 5 -p 9000
# 给 php-cgi.exe 加参数
xxfpm "./php-cgi.exe -c ./php.ini" -n 5 -i 127.0.0.1 -p 9000
如何维护进程:
Windows上使用CreateProcess创建进程,使用WaitForSingleObject等待进程结束;Linux上使用fork和execl创建进程,使用waitpid等待进程结束。Linux的版本多了在创建子进程的时候可以设置进程限制,能够以受限用户方式来运行。
当进程管理器被关闭的时候,它所创建的所有子进程也必须被关闭。 Windows上使用JobObject这个东西来把子进程与管理器的进程产生关联。 Linux上通过捕捉关闭信号,然后给所有子进程发送SIGTERM来结束子进程。
简单的启动脚本
run-php-cgi.bat
@echo off
echo Check php-cgi
netstat -aon|findstr "9081"
tasklist /fi "imagename eq php-cgi.exe"
echo Start php-cgi for php81...
set fpm-cmd="C:\Users\Zbuzhi\scoop\apps\php81\current\php-cgi.exe -c C:\Users\Zbuzhi\scoop\apps\php81\current\cli\php.ini -c C:\Users\Zbuzhi\scoop\apps\php81\current\cli\conf.d\extensions.ini"
xxfpm %fpm-cmd% -n 3 -i 127.0.0.1 -p 9081
echo.
echo Finish
for /l %%i in (5,-1,0) do (
@REM cls
@REM echo.
@REM echo.
@REM echo.
echo. Close after %%i seconds
ping 127.1 -n 2 >nul
)
echo Finish
echo ^
pause