【PHP】如何将ThinkPHP 5部署到windows服务器的IIS里,和PHP版本又是一个怎么样的关系,三分钟教程搞定部署

🌹欢迎来到《小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/

格式说明

  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/

解压

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】部署和发布PHP网站到IIS服务器

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

相关推荐
JaguarJack2 小时前
2026 年 PHP 8.4 依然重要:跳到 8.5 之前你该掌握的特性
后端·php·服务端
weixin_462446232 小时前
【原创实践】Windows 和 Linux 下使用 Python 3.10 搭建 PaddleOCRVL 识别图片并100%还原表格
linux·windows·python·飞浆
BingoGo2 小时前
2026 年 PHP 8.4 依然重要:跳到 8.5 之前你该掌握的特性
后端·php
人工智能训练3 小时前
UE5中如何解决角色网格体“掉下去”的问题
运维·服务器·windows·容器·ue5
唐宋元明清218810 小时前
.NET 磁盘管理-技术方案选型
windows·c#·存储
猫头虎10 小时前
2025最新OpenEuler系统安装MySQL的详细教程
linux·服务器·数据库·sql·mysql·macos·openeuler
桌面运维家11 小时前
vDisk VOI/IDV Windows本地运行异常怎么办?快速排查恢复
windows
木子.李34711 小时前
ssh连接远程服务器相关总结
运维·服务器·ssh
BD_Marathon11 小时前
SpringBoot——辅助功能之切换web服务器
服务器·前端·spring boot