在Windows环境下使用IIS部署ThinkPHP5框架,需先通过AI分析确定PHP版本(如7.4NTS)及ThinkPHP5.0.24,下载对应PHP并配置php.ini,设置IIS处理程序映射,同时部署MySQL数据库,注意版本兼容性与运行库安装。
Windows环境下使用IIS部署ThinkPHP5
时间:2026-06-07
浏览:533
文章目录
前言
今天帮助朋友部署一个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安装
PHP是一种广泛使用的开源通用脚本语言,特别适用于Web开发,具有简洁语法和易于学习的特点。它跨平台、开源、简单易学,支持灵活的框架和强大的数据库,还内置服务器功能。

下载地址
历史版本: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.ini-production复制一份并重命名为php.ini,然后进行以下设置:
设置路径
找到extension_dir,去掉前面的分号(启用),并填写PHP扩展的具体路径:

; http://php.net/extension-dirextension_dir = "C:webphpphp-7.4.33-nts-Win32-vc15-x64ext"
设置扩展
extension=bz2extension=curl;extension=ffi;extension=ftpextension=fileinfoextension=gd2extension=gettext;extension=gmp;extension=intl;extension=imap;extension=ldapextension=mbstringextension=exif ; Must be after mbstring as it depends on itextension=mysqli;extension=oci8_12c ; Use with Oracle Database 12c Instant Client;extension=odbcextension=openssl;extension=pdo_firebirdextension=pdo_mysql;extension=pdo_ociextension=pdo_odbcextension=pdo_pgsqlextension=pdo_sqliteextension=pgsql;extension=shmop
其他设置
设置时区:date.timezone=Asia/Beijing
设置ssl:cacert.pem
开启PHP短标签:short_open_tag=on
以CGI模式运行:cgi.force_redirect = 0
开启IIS的FastCGI托管:fastcgi.impersonate = 1
cgi.rfc2616_headers = 1
PHP部署

添加角色
如果是首次配置IIS环境,需要添加角色以及CGI等应用程序,此处不再赘述。


处理程序映射
点击“处理程序映射”,再点击“添加模块映射”,在弹出的窗口中填写信息:

请求路径:*.php模块选择:FastCgiModel可执行文件:php-cgi.exe(解压后目录中查找)名称:phpcgi(可自定义命名)
增加默认文件
添加默认文档,使访问首页时无需输入具体PHP文件名,自动访问index.php。


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

PHP 5.5对应VC++2012。

MySQL绿色版本部署
以mysql-5.7.44-winx64绿色版为例。
文件结构
D:mysql-5.7.44-winx64├── bin # 可执行文件├── docs # 文档├── include # 头文件├── lib # 库文件├── share # 共享文件├── LICENSE # 许可证└── README # 说明文件
一键启动
创建start_mysql.bat,写入以下内容,运行即可启动服务,同时自动生成my.ini文件。
@echo offchcp 65001 > nultitle MySQL 5.7.44 绿色版启动器setlocal enabledelayedexpansionecho ========================================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%binmysqld.exe" ( echo 错误:未找到 mysqld.exe pause exit /b 1)REM 检查是否已安装服务sc query MySQL57 >nul 2>&1if !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:/=%/dataecho # 端口echo port=3306echo # 字符集(使用utf8避免兼容问题)echo character-set-server=utf8echo collation-server=utf8_general_ciecho # 最大连接数echo max_connections=200echo # 存储引擎echo default-storage-engine=INNODBecho # Windows下不区分表名大小写echo lower_case_table_names=1echo # 日志echo log-error=%MYSQL_DIR:/=%/logs/mysql_error.logecho general_log_file=%MYSQL_DIR:/=%/logs/mysql_general.logecho # 跳过密码验证(第一次安装后可以注释掉)echo # skip-grant-tablesecho.echo [client]echo default-character-set=utf8echo port=3306echo.echo [mysql]echo default-haracter-set=utf8) > "%MYSQL_DIR%my.ini"REM 3. 初始化MySQLecho [3/4] 初始化MySQL数据库...cd /d "%MYSQL_DIR%"binmysqld --initialize-insecure --user=mysql --consoleif !errorlevel! neq 0 ( echo 初始化可能已存在,继续安装...)REM 4. 安装Windows服务echo [4/4] 安装MySQL服务...binmysqld --install MySQL57 --defaults-file="%MYSQL_DIR%my.ini"if !errorlevel! neq 0 ( echo 服务安装失败,可能已存在):START_SERVICEecho.echo 启动MySQL服务...net start MySQL57if !errorlevel! equ 0 ( echo MySQL 5.7.44 启动成功! echo. echo ======================================== echo 连接信息: echo 用户名:root echo 密码:(无,首次登录请直接回车) echo 端口:3306 echo. echo 连接命令: echo %MYSQL_DIR%binmysql -u root echo. echo 修改密码命令(在MySQL中执行): echo ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码'; echo FLUSH PRIVILEGES; echo ========================================) else ( echo 服务启动失败 echo 请查看日志:%MYSQL_DIR%logsmysql_error.log)echo.echo 是否现在打开MySQL命令行?(Y/N)set /p choice=if /i "!choice!"=="y" ( start "%MYSQL_DIR%binmysql.exe" -u root)pause


停止服务
创建stop_mysql.bat,写入以下内容,运行即可停止MySQL服务。
@echo offchcp 65001 > nulecho 正在停止MySQL 5.7.44...net stop MySQL57if %errorlevel% equ 0 ( echo MySQL已停止) else ( echo 服务未运行或停止失败)pause
卸载服务
创建uninstall_mysql.bat,写入以下内容。
@echo offchcp 65001 > nulecho ========================================echo 卸载 MySQL 5.7.44 服务echo ========================================echo.echo 正在停止MySQL服务...net stop MySQL57 >nul 2>&1echo 正在删除MySQL服务...sc delete MySQL57 >nul 2>&1if %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 offchcp 65001 > nulecho 测试MySQL连接...cd /d "%~dp0"if exist "binmysql.exe" ( binmysql -u root -e "SELECT VERSION() as MySQL版本;" 2>nul if %errorlevel% equ 0 ( echo MySQL连接成功! binmysql -u root -e "SHOW DATABASES;" ) else ( echo MySQL连接失败 )) else ( echo 未找到mysql.exe)pause

设置账号
@echo offchcp 65001 > nultitle MySQL 5.7.44 一键配置工具setlocal enabledelayedexpansionecho ========================================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%binmysqld.exe" ( echo 错误:未找到 mysqld.exe echo 请将此脚本放在MySQL根目录下运行 pause exit /b 1)echo [1/7] 检查MySQL服务状态...sc query MySQL57 >nul 2>&1if !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:/=%/dataecho port=3306echo character-set-server=utf8echo collation-server=utf8_general_ciecho max_connections=1000echo default-storage-engine=INNODBecho lower_case_table_names=1echo log-error=%MYSQL_DIR:/=%/logs/mysql_error.logecho.echo # 远程访问配置(关键!)echo bind-address=0.0.0.0echo skip-name-resolveecho wait_timeout=600echo interactive_timeout=600echo.echo [client]echo default-character-set=utf8echo port=3306echo.echo [mysql]echo default-character-set=utf8) > "%MYSQL_DIR%my.ini"REM 3. 初始化MySQL(无密码)echo [4/7] 初始化MySQL数据库...cd /d "%MYSQL_DIR%"echo 正在初始化,请稍候...binmysqld --initialize-insecure --user=mysql --console >nul 2>&1if exist "%MYSQL_DIR%data*.err" ( echo 初始化完成) else ( echo 初始化可能已存在)REM 4. 安装Windows服务echo [5/7] 安装MySQL服务...binmysqld --install MySQL57 --defaults-file="%MYSQL_DIR%my.ini" >nul 2>&1if !errorlevel! equ 0 ( echo 服务安装成功) else ( echo 服务可能已存在):CHECK_RUNNINGREM 5. 启动MySQL服务echo [6/7] 启动MySQL服务...net start MySQL57 >nul 2>&1if !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%logsmysql_error.log pause exit /b 1 ))REM 6. 创建test用户和数据库echo [7/7] 创建数据库用户...echo 创建用户:test,密码:Test#2025echo.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>&1netsh advfirewall firewall add rule name="MySQL 3306 Out" dir=out action=allow protocol=TCP localport=3306 >nul 2>&1REM 8. 获取本机IP地址echo.echo 正在获取本机IP地址...echo.echo 本机IP列表:set count=0for /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>&1echo.echo ========================================echo 配置完成!echo ========================================echo.echo ? 数据库信息:echo 主机:localhost 或 上面显示的IP地址echo 端口:3306echo 用户名:testecho 密码:Test#2025echo.echo ? 连接方式:echo 1. 本地连接:mysql -u test -pTest#2025echo 2. Navicat连接:echo 主机:上面显示的IP地址 [!count!]echo 端口:3306echo 用户:testecho 密码:Test#2025echo.echo 测试连接:echo %MYSQL_DIR%binmysql -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.1echo ========================================echo.REM 测试连接echo 正在测试test用户连接...%MYSQL_DIR%binmysql -u test -pTest#2025 -e "SELECT ' 连接成功!' as Status, VERSION() as MySQL版本, USER() as 当前用户, @@hostname as 服务器;" 2>nulif !errorlevel! equ 0 ( echo test用户连接测试通过!) else ( echo test用户连接测试失败,正在尝试修复... REM 尝试使用root创建用户 %MYSQL_DIR%binmysql -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%binmysql.exe" -u test -pTest#2025)echo.set /p choice2=是否创建测试数据库?(Y/N): if /i "!choice2!"=="y" ( %MYSQL_DIR%binmysql -u test -pTest#2025 -e "CREATE DATABASE IF NOT EXISTS test_db; SHOW DATABASES;" echo 测试数据库 test_db 已创建)pause


总结
本文详细记录了在Windows环境下使用IIS部署PHP框架(ThinkPHP5)的完整过程,包括环境分析、PHP安装配置、IIS处理程序映射,以及MySQL绿色版本的部署和账号设置。通过合理选择版本、配置扩展和调整系统设置,可以确保PHP网站稳定运行。希望这篇指南能为遇到相似需求的开发者提供参考。
实用工具推荐
绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
选择画质和输出格式,预览压缩前后的大小。