Windows IIS 部署 ThinkPHP 5 及 PHP 版本配置指南
介绍在 Windows IIS 服务器上部署 ThinkPHP 5 项目的完整流程。内容包括通过代码分析确定数据库及框架版本,选择合适的 PHP 版本(如 7.4),配置 php.ini 扩展与时区,设置 IIS 处理程序映射为 FastCGI,添加默认文档。同时涵盖常见报错解决(如 VC 运行库)以及 MySQL 绿色版的一键启动、停止与服务管理脚本示例,帮助开发者快速完成环境搭建与部署。

介绍在 Windows IIS 服务器上部署 ThinkPHP 5 项目的完整流程。内容包括通过代码分析确定数据库及框架版本,选择合适的 PHP 版本(如 7.4),配置 php.ini 扩展与时区,设置 IIS 处理程序映射为 FastCGI,添加默认文档。同时涵盖常见报错解决(如 VC 运行库)以及 MySQL 绿色版的一键启动、停止与服务管理脚本示例,帮助开发者快速完成环境搭建与部署。

在部署前需确认数据库、PHP 版本及框架版本,确保兼容性。
检查代码中的数据库命名、账号密码。通常使用 MySQL。创建对应数据库并执行 SQL 语句初始化表结构。
MYSQL 历史版本下载地址:https://downloads.mysql.com/archives/community/

通过代码分析确定所需 PHP 版本(如 5.4.0+)。建议使用稳定性好的接近版本。

确认框架版本。当前代码使用 ThinkPHP 5.0.24,要求 PHP >= 5.4.0。

建议优先使用稳定版本,避免直接使用过新或过旧版本导致报错。

PHP 是广泛使用的开源脚本语言,适用于 Web 开发。支持跨平台、开源、简单易学。

历史版本:https://www.php.net/releases/
格式说明:
.tar.gz - 通用压缩格式。.tar.bz2 - 压缩率较高。.tar.xz - 压缩率最高。选择建议:不确定时推荐下载 PHP 7.4.33 (tar.gz) 或 Windows NTS 版本。
Windows 下部署推荐使用 NTS 版本(包含 php-cgi.exe)。
64 位示例:https://windows.php.net/downloads/releases/archives/php-7.4.33-nts-Win32-vc15-x64.zip

PHP 为绿色版本,无需安装,直接解压至指定目录(如 C:\web\php)。

将 php.ini-production 复制为 php.ini 并进行设置。

修改 extension_dir,启用扩展目录路径。
; http://php.net/extension-dir extension_dir ="C:\web\php\php-7.4.33-nts-Win32-vc15-x64\ext"
启用常用扩展,注意顺序依赖。
extension=bz2
extension=curl
extension=fileinfo
extension=gd2
extension=mbstring
extension=mysqli
extension=openssl
extension=pdo_mysql
date.timezone=Asia/Beijing
short_open_tag=on
cgi.force_redirect = 0
fastcgi.impersonate = 1
cgi.rfc2616_headers = 1
首次配置 IIS 环境需添加角色及 CGI 功能。

点击处理程序映射,添加模块映射。
*.phpFastCgiModulephp-cgi.exephpcgi)
添加 index.php 为默认文档,访问首页无需指定文件名。

缺少 VC 运行库:下载安装 Microsoft Visual C++ Redistributable。
链接:https://aka.ms/vs/16/release/vc_redist.x64.exe

不同 PHP 版本对应不同 VC++ 版本(如 5.5 对应 VC++2012)。

以 MySQL 5.7.44 绿色版为例。
D:\mysql-5.7.44-winx64\
├── bin\ # 可执行文件
├── docs\ # 文档
├── include\ # 头文件
├── lib\ # 库文件
├── share\ # 共享文件
├── LICENSE # 许可证
└── README # 说明文件
创建 start_mysql.bat,内容如下:
@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 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=200
echo default-storage-engine=INNODB
echo lower_case_table_names=1
echo log-error=%MYSQL_DIR:\=/%/logs/mysql_error.log
echo general_log_file=%MYSQL_DIR:\=/%/logs/mysql_general.log
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:
@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:
@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:
@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

创建配置工具脚本,自动创建用户并开启远程访问。
@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# 基础配置
echobasedir=%MYSQL_DIR:\=/%
echodatadir=%MYSQL_DIR:\=/%/data
echoport=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
echoport=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 列表:
setcount=0for /f "tokens=2 delims=:" %%i in('ipconfig ^| findstr "IPv4"')do(set"ip=%%i"set"ip=!ip: =!"if not "!ip!"==""(set /a count+=1echo[!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 🔗 连接方式:
echo1. 本地连接:mysql -u test -pTest#2025
echo2. 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 🛡️ 安全提醒:
echo1. 请及时修改 root 密码:ALTER USER'root'@'localhost' IDENTIFIED BY '新密码';
echo2. 如需关闭远程访问,修改 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 DATABASEES;"
echo ✅ 测试数据库 test_db 已创建
)
pause



微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online