宝塔面板PHP7.4环境下SQL Server扩展安装与ThinkPHP配置指南

在宝塔Linux面板环境中为PHP7.4安装SQL Server扩展(pdo_sqlsrv和sqlsrv)是连接Microsoft SQL Server数据库的关键步骤。本文将详细介绍从环境准备到ThinkPHP配置的完整流程,帮助开发者快速搭建PHP与SQL Server的连接环境。

一、环境准备与依赖安装

1.1 系统要求确认

在开始安装前,需要确认系统环境满足以下要求:

  • 操作系统:CentOS 7.x或Ubuntu 16.04及以上版本
  • PHP版本:PHP 7.4(宝塔面板默认安装路径为/www/server/php/74)
  • 宝塔面板:已安装并正常运行
  • 网络环境:服务器可访问外网,用于下载扩展包

1.2 添加微软官方源

由于SQL Server扩展需要微软官方的ODBC驱动支持,首先需要添加微软的软件源:

# 添加微软官方源
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssqlrelease.repo

注意事项

  • 如果系统是CentOS 8或更高版本,需要将rhel/7改为对应的版本号
  • 执行命令后会在/etc/yum.repos.d/目录下生成mssqlrelease.repo文件

1.3 安装ODBC驱动和必要组件

执行以下命令安装SQL Server连接所需的ODBC驱动和工具:

# 安装必要的驱动和工具
yum install msodbcsql mssql-tools unixODBC-devel

参数说明

  • msodbcsql:Microsoft ODBC Driver for SQL Server
  • mssql-tools:SQL Server命令行工具
  • unixODBC-devel:ODBC开发库

二、安装pdo_sqlsrv扩展

2.1 下载pdo_sqlsrv扩展包

进入合适的目录下载扩展包:

# 创建安装目录
mkdir -p /www/server/sqlsrv
cd /www/server/sqlsrv

# 下载pdo_sqlsrv扩展包
wget http://pecl.php.net/get/pdo_sqlsrv-5.10.1.tgz

版本选择建议

2.2 解压并进入扩展目录

# 解压扩展包
tar -zxvf pdo_sqlsrv-5.10.1.tgz

# 进入解压后的目录
cd pdo_sqlsrv-5.10.1

2.3 编译安装扩展

使用PHP的phpize工具生成配置脚本并编译安装:

# 使用php7.4的phpize生成configure文件
/www/server/php/74/bin/phpize

# 配置编译参数
./configure --with-php-config=/www/server/php/74/bin/php-config

# 编译并安装
make && make install

关键步骤说明

  • phpize:为PHP扩展生成configure脚本
  • --with-php-config:指定PHP配置文件的路径
  • make install:将编译好的扩展安装到PHP扩展目录

2.4 配置PHP加载扩展

安装完成后,需要在php.ini文件中添加扩展配置:

# 在php.ini中添加扩展配置
echo "extension = pdo_sqlsrv.so" >> /www/server/php/74/etc/php.ini

扩展路径说明

编译后的扩展文件通常位于:

/www/server/php/74/lib/php/extensions/no-debug-non-zts-20190902/pdo_sqlsrv.so

三、安装sqlsrv扩展

3.1 下载sqlsrv扩展包

# 返回安装目录
cd /www/server/sqlsrv

# 下载sqlsrv扩展包
wget http://pecl.php.net/get/sqlsrv-5.10.1.tgz

3.2 解压并编译安装

# 解压扩展包
tar -zxvf sqlsrv-5.10.1.tgz

# 进入解压后的目录
cd sqlsrv-5.10.1

# 使用phpize生成configure文件
/www/server/php/74/bin/phpize

# 配置编译参数
./configure --with-php-config=/www/server/php/74/bin/php-config

# 编译并安装
make && make install

3.3 配置PHP加载扩展

# 在php.ini中添加扩展配置
echo "extension = sqlsrv.so" >> /www/server/php/74/etc/php.ini

四、验证安装结果

4.1 重启PHP服务

# 重启PHP-FPM服务
systemctl restart php-fpm-74

# 或使用宝塔面板重启
/www/server/php/74/etc/init.d/php-fpm-74 reload

4.2 检查扩展是否加载成功

# 查看已加载的扩展
/www/server/php/74/bin/php -m | grep -i sqlsrv

预期输出

pdo_sqlsrv
sqlsrv

4.3 通过phpinfo验证

创建测试文件验证扩展是否正常工作:

# 创建测试文件
echo "<?php phpinfo(); ?>" > /www/wwwroot/test.php

在浏览器中访问http://服务器IP/test.php,搜索”sqlsrv”或”pdo_sqlsrv”,确认扩展已正确加载。

五、ThinkPHP数据库配置

5.1 配置database.php文件

在ThinkPHP项目中,打开application/database.php文件,添加SQL Server数据库配置:

<?php
return [
    // 默认数据库连接配置
    'default' => [
        // 数据库类型
        'type'            => 'sqlsrv',
        // 服务器地址
        'hostname'        => 'localhost',
        // 数据库名
        'database'        => 'your_database',
        // 用户名
        'username'        => 'sa',
        // 密码
        'password'        => 'your_password',
        // 端口
        'hostport'        => '1433',
        // 连接dsn
        'dsn'             => '',
        // 数据库连接参数
        'params'          => [],
        // 数据库编码默认采用utf8
        'charset'         => 'utf8',
        // 数据库表前缀
        'prefix'          => '',
        // 数据库调试模式
        'debug'           => true,
        // 数据库部署方式 0 集中式 1 分布式
        'deploy'          => 0,
        // 数据库读写是否分离
        'rw_separate'     => false,
        // 读写分离后 主服务器数量
        'master_num'      => 1,
        // 指定从服务器序号
        'slave_no'        => '',
        // 自动写入时间戳字段
        'auto_timestamp'  => false,
        // 时间字段取出后的默认时间格式
        'datetime_format' => 'Y-m-d H:i:s',
        // 是否需要进行SQL性能分析
        'sql_explain'     => false,
    ],
];

5.2 多数据库配置

如果需要在ThinkPHP中同时连接多个数据库,可以配置如下:

<?php
return [
    // 默认数据库连接
    'default' => [
        'type'     => 'mysql',
        'hostname' => 'localhost',
        'database' => 'mysql_db',
        'username' => 'root',
        'password' => 'mysql_password',
        'charset'  => 'utf8',
    ],
    
    // SQL Server数据库连接
    'sqlserver' => [
        'type'     => 'sqlsrv',
        'hostname' => 'localhost',
        'database' => 'sqlserver_db',
        'username' => 'sa',
        'password' => 'sqlserver_password',
        'hostport' => '1433',
        'charset'  => 'utf8',
    ],
];

5.3 使用多数据库连接

在控制器中使用不同的数据库连接:

<?php
namespace app\index\controller;

use think\Controller;
use think\Db;

class Index extends Controller
{
    public function index()
    {
        // 使用默认数据库连接
        $mysqlData = Db::table('users')->select();
        
        // 使用SQL Server数据库连接
        $sqlserverData = Db::connect('sqlserver')->table('customers')->select();
        
        return json([
            'mysql' => $mysqlData,
            'sqlserver' => $sqlserverData
        ]);
    }
}

六、常见问题与解决方案

6.1 扩展安装失败

问题描述:执行make命令时报错

解决方案

  1. 检查是否安装了必要的编译工具:
    yum install gcc gcc-c++ make
  2. 确认PHP开发包已安装:
    yum install php74-devel

6.2 扩展未加载

问题描述:php -m看不到扩展

解决方案

  1. 检查扩展文件是否存在:
    ls -la /www/server/php/74/lib/php/extensions/no-debug-non-zts-20190902/
  2. 确认php.ini中扩展路径正确:
    grep "extension.*sqlsrv" /www/server/php/74/etc/php.ini

6.3 连接数据库失败

问题描述:无法连接到SQL Server

解决方案

  1. 确认SQL Server服务已启动
  2. 检查防火墙是否开放1433端口:
    firewall-cmd --list-ports
    firewall-cmd --add-port=1433/tcp --permanent
    firewall-cmd --reload
  3. 确认SQL Server允许远程连接

6.4 字符集问题

问题描述:中文显示乱码

解决方案

在ThinkPHP配置中设置正确的字符集:

'charset' => 'utf8',

七、性能优化建议

7.1 连接池配置

在ThinkPHP配置中启用连接池:

'params' => [
    // 连接池配置
    \PDO::ATTR_PERSISTENT => true,
    // 最大连接数
    \PDO::ATTR_MAX_CONNECTIONS => 100,
],

7.2 查询缓存

启用SQL Server查询缓存:

'params' => [
    // 启用查询缓存
    \PDO::SQLSRV_ATTR_ENCODING => \PDO::SQLSRV_ENCODING_UTF8,
    \PDO::SQLSRV_ATTR_QUERY_TIMEOUT => 30,
],

八、安全配置建议

8.1 使用加密连接

在ThinkPHP配置中启用SSL加密:

'params' => [
    // 启用SSL加密
    \PDO::SQLSRV_ATTR_ENCRYPT => true,
    \PDO::SQLSRV_ATTR_TRUST_SERVER_CERTIFICATE => false,
],

8.2 最小权限原则

为应用程序创建专用的数据库用户,并授予最小必要权限:

-- 创建只读用户
CREATE LOGIN app_user WITH PASSWORD = 'StrongPassword123!';
CREATE USER app_user FOR LOGIN app_user;
EXEC sp_addrolemember 'db_datareader', 'app_user';

九、监控与日志

9.1 启用SQL Server日志

在ThinkPHP配置中启用数据库调试:

'debug' => true,

9.2 查看连接状态

使用以下SQL查询当前连接信息:

SELECT 
    session_id,
    login_name,
    host_name,
    program_name,
    status
FROM sys.dm_exec_sessions
WHERE is_user_process = 1;

十、总结

通过以上步骤,我们成功在宝塔面板PHP7.4环境中安装了pdo_sqlsrv和sqlsrv扩展,并配置了ThinkPHP与SQL Server的连接。关键点总结如下:

  1. 环境准备:添加微软源并安装ODBC驱动
  2. 扩展安装:分别编译安装pdo_sqlsrv和sqlsrv扩展
  3. 配置验证:通过phpinfo和命令行验证扩展加载
  4. ThinkPHP配置:正确配置database.php文件
  5. 问题排查:掌握常见问题的解决方法

在实际生产环境中,建议结合业务需求进行性能优化和安全加固,确保数据库连接的稳定性和安全性。

版权声明:本文为JienDa博主的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
若内容若侵犯到您的权益,请发送邮件至:platform_service@jienda.com我们将第一时间处理!
所有资源仅限于参考和学习,版权归JienDa作者所有,更多请访问JienDa首页。

给TA赞助
共{{data.count}}人
人已赞助
后端

PHP内存耗尽错误:原因分析与全方位优化解决方案

2025-12-24 17:06:05

后端

WordPress数据库连接错误全面解决方案

2025-12-24 19:04:44

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索