Windows环境下使用IIS部署ThinkPHP5

作者:技术拾光

时间:2026-06-07

浏览:533

在Windows环境下使用IIS部署ThinkPHP5框架,需先通过AI分析确定PHP版本(如7.4NTS)及ThinkPHP5.0.24,下载对应PHP并配置php.ini,设置IIS处理程序映射,同时部署MySQL数据库,注意版本兼容性与运行库安装。

文章目录

前言

今天帮助朋友部署一个PHP网站。平时接触PHP的机会较少,之前写过一篇关于在IIS下部署PHP的文章。重新翻阅那篇文章时发现版本有变化,因此再写一篇记录部署过程。

代码分析

如今借助AI工具非常方便,特别是很久没有接触PHP后,已经记不清如何在代码中查看数据库、当前使用的PHP版本以及ThinkPHP框架的具体版本。

为什么需要关注版本?因为不同版本对应不同的代码库,版本不匹配可能导致报错,程序无法正常运行。

数据库

首先确定数据库类型。通常PHP项目使用MySQL数据库。

利用AI扫描分析代码,确认数据库名称以及账号密码,确保运行时配置一致。

知道数据库名称后,在MySQL中先创建数据库,然后执行SQL语句创建表和数据。

Windows环境下使用IIS部署ThinkPHP5

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

Windows环境下使用IIS部署ThinkPHP5

PHP版本

通过AI分析得知,PHP版本要求为5.4.0以上。版本过低或过高都可能出现问题,建议使用接近要求的稳定兼容版本。

Windows环境下使用IIS部署ThinkPHP5

ThinkPHP框架版本

AI已识别出该项目基于ThinkPHP框架开发,进一步确认框架具体版本为ThinkPHP5.0.24,对应的PHP版本要求为>=5.4.0。

Windows环境下使用IIS部署ThinkPHP5

版本兼容性

进一步向AI咨询是否兼容PHP 8.0以上版本。AI给出的建议是倾向于使用稳定版本,可作为参考依据。

Windows环境下使用IIS部署ThinkPHP5

PHP安装

PHP是一种广泛使用的开源通用脚本语言,特别适用于Web开发,具有简洁语法和易于学习的特点。它跨平台、开源、简单易学,支持灵活的框架和强大的数据库,还内置服务器功能。

Windows环境下使用IIS部署ThinkPHP5

下载地址

历史版本:https://www.php.net/releases/

Windows环境下使用IIS部署ThinkPHP5

格式说明:

  1. .tar.gz – 最常见的压缩格式,几乎所有系统都能解压。
  2. .tar.bz2 – 压缩率通常比.gz更高,文件更小,解压稍慢。
  3. .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/

Windows环境下使用IIS部署ThinkPHP5

Windows环境下使用IIS部署ThinkPHP5

解压

PHP为绿色版本,无需安装,直接解压即可。创建一个目录存放解压文件,并进行相关配置。

Windows环境下使用IIS部署ThinkPHP5

配置

Windows环境下使用IIS部署ThinkPHP5

将PHP根目录下的php.ini-production复制一份并重命名为php.ini,然后进行以下设置:

设置路径

找到extension_dir,去掉前面的分号(启用),并填写PHP扩展的具体路径:

Windows环境下使用IIS部署ThinkPHP5

; 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部署

Windows环境下使用IIS部署ThinkPHP5

添加角色

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

Windows环境下使用IIS部署ThinkPHP5

Windows环境下使用IIS部署ThinkPHP5

处理程序映射

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

Windows环境下使用IIS部署ThinkPHP5

请求路径:*.php模块选择:FastCgiModel可执行文件:php-cgi.exe(解压后目录中查找)名称:phpcgi(可自定义命名)

增加默认文件

添加默认文档,使访问首页时无需输入具体PHP文件名,自动访问index.php。

Windows环境下使用IIS部署ThinkPHP5

Windows环境下使用IIS部署ThinkPHP5

PHP运行

常见报错

缺少VC运行库:

下载安装:https://aka.ms/vs/16/release/vc_redist.x64.exe

Windows环境下使用IIS部署ThinkPHP5

PHP 5.5对应VC++2012。

Windows环境下使用IIS部署ThinkPHP5

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

Windows环境下使用IIS部署ThinkPHP5

Windows环境下使用IIS部署ThinkPHP5

停止服务

创建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

Windows环境下使用IIS部署ThinkPHP5

设置账号

@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部署ThinkPHP5

Windows环境下使用IIS部署ThinkPHP5

总结

本文详细记录了在Windows环境下使用IIS部署PHP框架(ThinkPHP5)的完整过程,包括环境分析、PHP安装配置、IIS处理程序映射,以及MySQL绿色版本的部署和账号设置。通过合理选择版本、配置扩展和调整系统设置,可以确保PHP网站稳定运行。希望这篇指南能为遇到相似需求的开发者提供参考。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章