【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)

相关推荐
BingoGo1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
Sinclair3 天前
简单几步,安卓手机秒变服务器,安装 CMS 程序
android·服务器
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
Rockbean4 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek
埃博拉酱4 天前
VS Code Remote SSH 连接 Windows 服务器卡在"下载 VS Code 服务器":prcdn DNS 解析失败的诊断与 BITS 断点续传
windows·ssh·visual studio code
茶杯梦轩4 天前
CompletableFuture 在 项目实战 中 创建异步任务 的核心优势及使用场景
服务器·后端·面试