🌹欢迎来到《小5讲堂》🌹
🌹这是《PHP》系列文章,每篇文章将以博主理解的角度展开讲解。🌹
🌹温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!🌹

目录
前言
博主今天抽空帮朋友部署一个PHP网站,平时接触php的机会很少,之前也写过一篇文章
介绍如果在IIS在部署PHP。
博主通过会看那篇文章发现,后续的版本有点不一样了,所以,再次写篇文章记录下。
代码分析
现在有AI实在是太方便了,特别是很久没接触过php,已经忘记在那些地方查看数据库以及
当前代码用的是php那个版本,以及用的ThinkPHP框架又是那个版本。
为什么说要看版本呢,因为不同的版本,代码库还是会有差异,版本使用不对,可能就会报错运行不起来。
数据库
首先要看下是用的什么数据库,这个好判断,大概能猜到,php一般都是用mysql。
让AI进行扫描分析下代码,数据库的命名以及账号密码,确保运行时一致。
知道数据库名称后,就可以在mysql上先创建一个数据库,然后执行sql语句创建表和数据。

MYSQL历史版本下载地址:https://downloads.mysql.com/archives/community/

php版本
通过AI分析后,知道了PHP版本是在5.4.0+,这就好办了,用太低或者用太高版本都可能有问题。
用接近的或者使用一个稳定性和兼容性好的一个版本。

ThinkPHP
通过上一步AI已经知道是基于ThinkPHP框架开发的,进一步确认下是框架那个版本。
当前代码使用的是ThinkPHP5.0.24,对应php版本要求是>=5.4.0。

版本兼容
进一步询问AI是否兼容php最新版本的8.0+。
虽然AI只是给出了建议性,但是可以作为参考,优先使用稳定版本比较好。

PHP安装
它是一种广泛使用的开源通用脚本语言,特别适用于Web开发。PHP以其简洁的语法和易于学习的特性而受到开发者的喜爱。它的特点是跨平台、开源、简单易学、灵活的框架、强大的数据库支持、内置服务器功能等。
下载地址
历史版本:https://www.php.net/releases/

格式说明:
- .tar.gz - 最常见的压缩格式,几乎所有系统都支持解压。
- .tar.bz2 - 压缩率通常比
.gz更高,文件稍小,解压稍慢。大部分主流工具也支持。 - .tar.xz - 压缩率最高,文件最小,但解压需要更多内存和CPU时间。
选择建议:
- 如果您不确定 ,直接点击
PHP 7.4.33 (tar.gz)这个链接下载。这是最通用、最不容易出问题的选择。 - 如果您很在意下载文件的大小,可以选择
.tar.xz。 - 下载后,您需要对应的解压工具来解压(如 Windows 上的 7-Zip,或 Linux/macOS 上的命令行工具)。
PHP CGI
但是这里我们不使用上面的压缩文件,由于博主是在windows下部署php,
所以,直接下载NTS版本(包含php-cgi.exe)
64位:https://windows.php.net/downloads/releases/archives/php-7.4.33-nts-Win32-vc15-x64.zip
https://windows.php.net/downloads/releases/archives/


解压
php是绿色版本,不需要运行安装,直接解压即可,并创建一个php目录存放解压文件,并配置一些信息。
配置

将PHP根目录下的php.ini-production复制一份并改名为 php.ini,并进行如下设置:
设置路径
找到extension_dir,并将前面的分号去掉(启用),并复制php配置具体路径,如下:

typescript
; http://php.net/extension-dir
extension_dir = "C:\web\php\php-7.4.33-nts-Win32-vc15-x64\ext"
设置扩展
typescript
extension=bz2
extension=curl
;extension=ffi
;extension=ftp
extension=fileinfo
extension=gd2
extension=gettext
;extension=gmp
;extension=intl
;extension=imap
;extension=ldap
extension=mbstring
extension=exif ; Must be after mbstring as it depends on it
extension=mysqli
;extension=oci8_12c ; Use with Oracle Database 12c Instant Client
;extension=odbc
extension=openssl
;extension=pdo_firebird
extension=pdo_mysql
;extension=pdo_oci
extension=pdo_odbc
extension=pdo_pgsql
extension=pdo_sqlite
extension=pgsql
;extension=shmop
其他设置
设置时区date.timezone=Asia/Beijing
设置ssl=cacert.pem
开启php短标签short_open_tag=on
以CGI模式运行PHP cgi.force_redirect = 0
开启IIS的FastCGI托管
fastcgi.impersonate = 1
cgi.rfc2616_headers = 1
PHP部署

添加角色
如果是首次配置的IIS环境,需要添加角色以及CGI等应用,此处略过。


处理程序映射
点击处理程序映射,再点添加模块映射,弹窗填写信息
php
请求路径:*.php
模块选择:FastCgiModel
可执行文件:php-cgi.exe(解压文件里找)
名称:phpcgi(自己自定义命名)
增加默认文件
添加默认文件,目的是访问首页不用输入具体php文件名就能够自动访问默认的index.php文件。

PHP运行
常见报错
缺少VC运行库:
下载安装:https://aka.ms/vs/16/release/vc_redist.x64.exe

5.5对应的是VC++2012

绿色版本
这里博主以mysql-5.7.44-winx64绿色版本为例子
文件结构
html
D:\mysql-5.7.44-winx64\
├── bin\ # 可执行文件
├── docs\ # 文档
├── include\ # 头文件
├── lib\ # 库文件
├── share\ # 共享文件
├── LICENSE # 许可证
└── README # 说明文件
一键启动
创建 start_mysql.bat,附上下面内容运行即可开启服务,并且会自动创建my.ini文件
batch
@echo off
chcp 65001 > nul
title MySQL 5.7.44 绿色版启动器
setlocal enabledelayedexpansion
echo ========================================
echo MySQL 5.7.44 绿色版启动程序
echo ========================================
echo.
REM 设置MySQL根目录(当前目录)
set "MYSQL_DIR=%~dp0"
set "MYSQL_DIR=%MYSQL_DIR:~0,-1%"
echo MySQL目录:%MYSQL_DIR%
echo.
REM 检查必要的文件
if not exist "%MYSQL_DIR%\bin\mysqld.exe" (
echo ❌ 错误:未找到 mysqld.exe
pause
exit /b 1
)
REM 检查是否已安装服务
sc query MySQL57 >nul 2>&1
if !errorlevel! equ 0 (
echo [1/4] ✅ MySQL57服务已存在
goto :START_SERVICE
)
echo [1/4] 准备安装MySQL57服务...
REM 1. 创建必要的目录
if not exist "%MYSQL_DIR%\data" mkdir "%MYSQL_DIR%\data"
if not exist "%MYSQL_DIR%\logs" mkdir "%MYSQL_DIR%\logs"
REM 2. 创建my.ini配置文件
echo [2/4] 创建配置文件...
(
echo [mysqld]
echo # MySQL安装目录
echo basedir=%MYSQL_DIR:\=/%
echo # MySQL数据目录
echo datadir=%MYSQL_DIR:\=/%/data
echo # 端口
echo port=3306
echo # 字符集(使用utf8避免兼容问题)
echo character-set-server=utf8
echo collation-server=utf8_general_ci
echo # 最大连接数
echo max_connections=200
echo # 存储引擎
echo default-storage-engine=INNODB
echo # Windows下不区分表名大小写
echo lower_case_table_names=1
echo # 日志
echo log-error=%MYSQL_DIR:\=/%/logs/mysql_error.log
echo general_log_file=%MYSQL_DIR:\=/%/logs/mysql_general.log
echo # 跳过密码验证(第一次安装后可以注释掉)
echo # skip-grant-tables
echo.
echo [client]
echo default-character-set=utf8
echo port=3306
echo.
echo [mysql]
echo default-character-set=utf8
) > "%MYSQL_DIR%\my.ini"
REM 3. 初始化MySQL
echo [3/4] 初始化MySQL数据库...
cd /d "%MYSQL_DIR%"
bin\mysqld --initialize-insecure --user=mysql --console
if !errorlevel! neq 0 (
echo ⚠️ 初始化可能已存在,继续安装...
)
REM 4. 安装Windows服务
echo [4/4] 安装MySQL服务...
bin\mysqld --install MySQL57 --defaults-file="%MYSQL_DIR%\my.ini"
if !errorlevel! neq 0 (
echo ⚠️ 服务安装失败,可能已存在
)
:START_SERVICE
echo.
echo 启动MySQL服务...
net start MySQL57
if !errorlevel! equ 0 (
echo ✅ MySQL 5.7.44 启动成功!
echo.
echo ========================================
echo 连接信息:
echo 用户名:root
echo 密码:(无,首次登录请直接回车)
echo 端口:3306
echo.
echo 连接命令:
echo %MYSQL_DIR%\bin\mysql -u root
echo.
echo 修改密码命令(在MySQL中执行):
echo ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码';
echo FLUSH PRIVILEGES;
echo ========================================
) else (
echo ❌ 服务启动失败
echo 请查看日志:%MYSQL_DIR%\logs\mysql_error.log
)
echo.
echo 是否现在打开MySQL命令行?(Y/N)
set /p choice=
if /i "!choice!"=="y" (
start "%MYSQL_DIR%\bin\mysql.exe" -u root
)
pause


停止服务
创建 stop_mysql.bat,附上下面内容运行即可停止服务
batch
@echo off
chcp 65001 > nul
echo 正在停止MySQL 5.7.44...
net stop MySQL57
if %errorlevel% equ 0 (
echo ✅ MySQL已停止
) else (
echo ⚠️ 服务未运行或停止失败
)
pause
卸载服务
创建uninstall_mysql.bat,附上下面内容
bash
@echo off
chcp 65001 > nul
echo ========================================
echo 卸载 MySQL 5.7.44 服务
echo ========================================
echo.
echo 正在停止MySQL服务...
net stop MySQL57 >nul 2>&1
echo 正在删除MySQL服务...
sc delete MySQL57 >nul 2>&1
if %errorlevel% equ 0 (
echo ✅ 服务删除成功
) else (
echo ⚠️ 服务不存在或删除失败
)
echo.
echo 是否删除数据文件?(Y/N)
echo 警告:这将删除所有数据库数据!
set /p choice=
if /i "%choice%"=="y" (
rmdir /s /q "%~dp0data" 2>nul
rmdir /s /q "%~dp0logs" 2>nul
del "%~dp0my.ini" 2>nul
echo ✅ 数据文件已删除
)
echo.
echo 卸载完成!
pause
测试链接
创建 test_mysql.bat(测试连接)
bash
@echo off
chcp 65001 > nul
echo 测试MySQL连接...
cd /d "%~dp0"
if exist "bin\mysql.exe" (
bin\mysql -u root -e "SELECT VERSION() as MySQL版本;" 2>nul
if %errorlevel% equ 0 (
echo ✅ MySQL连接成功!
bin\mysql -u root -e "SHOW DATABASES;"
) else (
echo ❌ MySQL连接失败
)
) else (
echo ❌ 未找到mysql.exe
)
pause

设置账号
bash
@echo off
chcp 65001 > nul
title MySQL 5.7.44 一键配置工具
setlocal enabledelayedexpansion
echo ========================================
echo MySQL 5.7.44 一键配置工具
echo 自动创建test用户并开启远程访问
echo ========================================
echo.
REM 设置MySQL根目录
set "MYSQL_DIR=%~dp0"
set "MYSQL_DIR=%MYSQL_DIR:~0,-1%"
echo MySQL目录:%MYSQL_DIR%
echo.
REM 检查必要的文件
if not exist "%MYSQL_DIR%\bin\mysqld.exe" (
echo ❌ 错误:未找到 mysqld.exe
echo 请将此脚本放在MySQL根目录下运行
pause
exit /b 1
)
echo [1/7] 检查MySQL服务状态...
sc query MySQL57 >nul 2>&1
if !errorlevel! equ 0 (
echo ✅ MySQL57服务已存在
goto :CHECK_RUNNING
)
echo ⚠️ MySQL57服务不存在,开始安装...
REM 1. 创建必要的目录
echo [2/7] 创建目录结构...
if not exist "%MYSQL_DIR%\data" mkdir "%MYSQL_DIR%\data"
if not exist "%MYSQL_DIR%\logs" mkdir "%MYSQL_DIR%\logs"
REM 2. 创建my.ini配置文件(支持远程访问)
echo [3/7] 创建配置文件...
(
echo [mysqld]
echo # 基础配置
echo basedir=%MYSQL_DIR:\=/%
echo datadir=%MYSQL_DIR:\=/%/data
echo port=3306
echo character-set-server=utf8
echo collation-server=utf8_general_ci
echo max_connections=1000
echo default-storage-engine=INNODB
echo lower_case_table_names=1
echo log-error=%MYSQL_DIR:\=/%/logs/mysql_error.log
echo.
echo # 远程访问配置(关键!)
echo bind-address=0.0.0.0
echo skip-name-resolve
echo wait_timeout=600
echo interactive_timeout=600
echo.
echo [client]
echo default-character-set=utf8
echo port=3306
echo.
echo [mysql]
echo default-character-set=utf8
) > "%MYSQL_DIR%\my.ini"
REM 3. 初始化MySQL(无密码)
echo [4/7] 初始化MySQL数据库...
cd /d "%MYSQL_DIR%"
echo 正在初始化,请稍候...
bin\mysqld --initialize-insecure --user=mysql --console >nul 2>&1
if exist "%MYSQL_DIR%\data\*.err" (
echo ✅ 初始化完成
) else (
echo ⚠️ 初始化可能已存在
)
REM 4. 安装Windows服务
echo [5/7] 安装MySQL服务...
bin\mysqld --install MySQL57 --defaults-file="%MYSQL_DIR%\my.ini" >nul 2>&1
if !errorlevel! equ 0 (
echo ✅ 服务安装成功
) else (
echo ⚠️ 服务可能已存在
)
:CHECK_RUNNING
REM 5. 启动MySQL服务
echo [6/7] 启动MySQL服务...
net start MySQL57 >nul 2>&1
if !errorlevel! equ 0 (
echo ✅ MySQL服务启动成功
) else (
net stop MySQL57 >nul 2>&1
net start MySQL57 >nul 2>&1
if !errorlevel! equ 0 (
echo ✅ MySQL服务重启成功
) else (
echo ❌ MySQL服务启动失败
echo 请查看日志:%MYSQL_DIR%\logs\mysql_error.log
pause
exit /b 1
)
)
REM 6. 创建test用户和数据库
echo [7/7] 创建数据库用户...
echo 创建用户:test,密码:Test#2025
echo.
REM 使用临时SQL文件创建用户
(
echo USE mysql;
echo.
echo -- 删除已存在的test用户
echo DROP USER IF EXISTS 'test'@'localhost';
echo DROP USER IF EXISTS 'test'@'%%';
echo.
echo -- 创建test用户(本地访问)
echo CREATE USER 'test'@'localhost' IDENTIFIED BY 'Test#2025';
echo -- 授予所有权限
echo GRANT ALL PRIVILEGES ON *.* TO 'test'@'localhost' WITH GRANT OPTION;
echo.
echo -- 创建test用户(远程访问)
echo CREATE USER 'test'@'%%' IDENTIFIED BY 'Test#2025';
echo -- 授予所有权限
echo GRANT ALL PRIVILEGES ON *.* TO 'test'@'%%' WITH GRANT OPTION;
echo.
echo -- 刷新权限
echo FLUSH PRIVILEGES;
echo.
echo -- 验证创建
echo SELECT user, host FROM mysql.user WHERE user = 'test';
echo SHOW GRANTS FOR 'test'@'%%';
) > "%TEMP%\create_user.sql"
REM 执行SQL文件
cd /d "%MYSQL_DIR%\bin"
mysql -u root < "%TEMP%\create_user.sql"
REM 7. 配置Windows防火墙
echo 配置防火墙允许远程连接...
netsh advfirewall firewall add rule name="MySQL 3306" dir=in action=allow protocol=TCP localport=3306 >nul 2>&1
netsh advfirewall firewall add rule name="MySQL 3306 Out" dir=out action=allow protocol=TCP localport=3306 >nul 2>&1
REM 8. 获取本机IP地址
echo.
echo 正在获取本机IP地址...
echo.
echo 本机IP列表:
set count=0
for /f "tokens=2 delims=:" %%i in ('ipconfig ^| findstr "IPv4"') do (
set "ip=%%i"
set "ip=!ip: =!"
if not "!ip!"=="" (
set /a count+=1
echo [!count!] !ip!
set "ip!count!=!ip!"
)
)
REM 删除临时文件
del "%TEMP%\create_user.sql" >nul 2>&1
echo.
echo ========================================
echo ✅ 配置完成!
echo ========================================
echo.
echo 📋 数据库信息:
echo 主机:localhost 或 上面显示的IP地址
echo 端口:3306
echo 用户名:test
echo 密码:Test#2025
echo.
echo 🔗 连接方式:
echo 1. 本地连接:mysql -u test -pTest#2025
echo 2. Navicat连接:
echo 主机:上面显示的IP地址 [!count!]
echo 端口:3306
echo 用户:test
echo 密码:Test#2025
echo.
echo ⚙️ 测试连接:
echo %MYSQL_DIR%\bin\mysql -u test -pTest#2025 -e "SELECT VERSION();"
echo.
echo 🛡️ 安全提醒:
echo 1. 请及时修改root密码:ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
echo 2. 如需关闭远程访问,修改my.ini中的bind-address=127.0.0.1
echo ========================================
echo.
REM 测试连接
echo 正在测试test用户连接...
%MYSQL_DIR%\bin\mysql -u test -pTest#2025 -e "SELECT '✅ 连接成功!' as Status, VERSION() as MySQL版本, USER() as 当前用户, @@hostname as 服务器;" 2>nul
if !errorlevel! equ 0 (
echo ✅ test用户连接测试通过!
) else (
echo ⚠️ test用户连接测试失败,正在尝试修复...
REM 尝试使用root创建用户
%MYSQL_DIR%\bin\mysql -u root -e "CREATE USER IF NOT EXISTS 'test'@'%%' IDENTIFIED BY 'Test#2025'; GRANT ALL ON *.* TO 'test'@'%%'; FLUSH PRIVILEGES;" 2>nul
)
echo.
set /p choice=是否打开MySQL命令行测试?(Y/N):
if /i "!choice!"=="y" (
start "%MYSQL_DIR%\bin\mysql.exe" -u test -pTest#2025
)
echo.
set /p choice2=是否创建测试数据库?(Y/N):
if /i "!choice2!"=="y" (
%MYSQL_DIR%\bin\mysql -u test -pTest#2025 -e "CREATE DATABASE IF NOT EXISTS test_db; SHOW DATABASES;"
echo ✅ 测试数据库 test_db 已创建
)
pause


文章推荐
[PHP】Windows服务器安装宝塔部署php网站](https://blog.csdn.net/lmy_520/article/details/121046651?spm=1011.2415.3001.5331)