PHP Yii2 安装SQL Server扩展-MAC M4 Pro芯片

MAC M4 Pro芯片版本,千锤百炼编译十几次终于成功

复制代码
# 设置基础镜像并强制使用 x86_64 架构(适配 M4 芯片)
FROM --platform=linux/amd64 php:8.1-fpm-alpine3.18

WORKDIR /var/www/html

# 可选:设置时区
ARG TZ=Asia/Shanghai
ENV TZ=${TZ}

# 使用阿里云镜像源加速(国内用户推荐)
RUN sed -i 's/https:\/\/dl-cdn.alpinelinux.org\/alpine/https:\/\/mirrors.aliyun.com\/alpine/g' /etc/apk/repositories && \
    sed -i 's/v3\.18/latest-stable/g' /etc/apk/repositories

# 安装常用工具和编译依赖(新增 unixodbc-dev)
RUN apk add --no-cache \
        tzdata \
        shadow \
        unzip \
        curl \
        gnupg \
        autoconf \
        make \
        g++ \
        re2c \
        unixodbc-dev   # 👈 必须添加这个包

# 复制本地 .apk 包进容器
COPY ./msodbcsql17_17.10.6.1-1_amd64.apk /tmp/
COPY ./mssql-tools_17.10.1.1-1_amd64.apk /tmp/

# 安装 Microsoft ODBC Driver 和工具
RUN apk add --allow-untrusted /tmp/msodbcsql17_17.10.6.1-1_amd64.apk && \
    apk add --allow-untrusted /tmp/mssql-tools_17.10.1.1-1_amd64.apk

# 安装 SQLSRV 扩展(使用内置的 pecl)
RUN pecl install sqlsrv pdo_sqlsrv && \
    docker-php-ext-enable sqlsrv pdo_sqlsrv

# 清理缓存
RUN rm -rf /tmp/* /var/cache/apk/*

#Download the desired package(s)
https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.10.6.1-1_amd64.apk
https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/mssql-tools_17.10.1.1-1_amd64.apk

测试代码

复制代码
<?php
try {
    $dbh = new PDO("sqlsrv:Server=***;Database=***", "***", "***");
    echo "Connected to SQL Server successfully!";
} catch (PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}

安装过程如下

Dockerfile

复制代码
FROM php:8.1-fpm-alpine

WORKDIR /var/www/html

ARG TZ=Asia/Shanghai
ENV TZ=${TZ}

RUN apk add --no-cache \
        tzdata \
        shadow \
        unzip \
        curl \
        libjpeg-turbo \
        libpng \
        freetype \
        libzip \
        git \
        build-base \
        autoconf \
        automake \
        cmake \
        linux-headers \
        make \
        g++ \
        pkgconfig \
        unixodbc-dev \
        krb5-dev \
        openssl-dev \
        icu-dev \
    && apk add --no-cache --virtual .build-deps \
        libjpeg-turbo-dev \
        libpng-dev \
        freetype-dev \
        zlib-dev \
        libzip-dev \
    # 安装 GD 扩展
    && docker-php-ext-configure gd \
        --with-jpeg=/usr/include/ \
        --with-freetype=/usr/include/freetype2 \
    && docker-php-ext-install -j$(nproc) \
        pdo_mysql \
        mysqli \
        gd \
        opcache \
        sockets \
        zip \
        pcntl \
        posix \
    # 安装 sqlsrv 和 pdo_sqlsrv
    && pecl install sqlsrv pdo_sqlsrv \
    && docker-php-ext-enable sqlsrv pdo_sqlsrv \
    # 清理构建依赖
    && apk del .build-deps \
    && rm -rf /tmp/* /var/cache/apk/* \
    # 设置时区
    && cp "/usr/share/zoneinfo/${TZ}" /etc/localtime \
    && echo "${TZ}" > /etc/timezone

7.4安装失败:

46.26 WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update 50.07 pecl/sqlsrv requires PHP (version >= 8.1.0), installed version is 7.4.33 50.07 pecl/pdo_sqlsrv requires PHP (version >= 8.1.0), installed version is 7.4.33 50.07 No valid packages found 50.07 install failed

复制代码
复制代码
这是由于微软从 2022 年起发布的 SQL Server 驱动只支持 PHP 8.1 及以上版本,不再为 PHP 7.x 提供官方支持。

我因为使用docker 所以直接升级改起

安装成功 启动

1005 docker-compose build php8

1006 docker-compose start php8

1007 docker-compose down

1008 docker-compose up -d


报错:因为我是M4芯片

yii\base\ErrorException: Unsupported processor architecture.

这是 PDO_SQLSRV 扩展的一个已知问题,常见于以下情况:

  • 使用了 不兼容的 PHP 架构(如 ARM)
  • 安装的 pdo_sqlsrvsqlsrv 扩展版本与当前系统架构不匹配
  • 某些二进制包只支持 x86/x64 架构,而在 M1/M2(ARM)芯片上运行时会抛出此错误

需要使用

FROM --platform=linux/amd64 php:8.1-fpm-alpine

下载地址:

Install the Microsoft ODBC driver for SQL Server (Linux) - ODBC Driver for SQL Server | Microsoft Learn

MAC M系列芯片 完整Dockerfile 见顶部

Windows版

复制代码
FROM php:8.1-fpm

# 安装必要的依赖
RUN apt-get update && apt-get install -y \
    git \
    curl \
    wget \
    unzip \
    gnupg \
    locales \
    && rm -rf /var/lib/apt/lists/*

# 设置时区(可选)
RUN echo "date.timezone = Asia/Shanghai" > /usr/local/etc/php/conf.d/timezone.ini

# 安装 Microsoft ODBC Driver for SQL Server
RUN curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - \
    && curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list \
    && apt-get update \
    && ACCEPT_EULA=Y apt-get install -y msodbcsql17

# 安装 unixODBC 开发文件
RUN apt-get install -y unixodbc-dev

# 安装 sqlsrv 和 pdo_sqlsrv 扩展
RUN pecl install sqlsrv-5.9.0 pdo_sqlsrv-5.9.0 \
    && docker-php-ext-enable sqlsrv pdo_sqlsrv
相关推荐
88号技师16 分钟前
2026年2月一区SCI-交叉传播优化算法Propagation Alongside Crossover-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法
A.零点20 分钟前
【2个月 C 语言从入门到精通:零基础系统教程】第十二讲:深入了解指针(五)
c语言·开发语言·网络·笔记·visual studio
飞天狗11130 分钟前
零基础JavaWeb入门——第五课第一小节:九大内置对象 · 第1个:request(请求对象)
java·开发语言·前端·后端·servlet
z落落30 分钟前
C#ToolStrip+StatusStrip 状态栏实时显示系统时间+NotifyIcon系统托盘
开发语言·c#
插件开发41 分钟前
vs2015 cuda c++ 线程号的计算详解
开发语言·c++·算法
石山代码42 分钟前
变量与解构
开发语言·前端·javascript
c++之路1 小时前
Bazel C++ 构建系列文档(五):多目标与多包项目
java·开发语言·c++
Hello:CodeWorld1 小时前
【C++ 避坑指南】告别缓冲区溢出!全面解析 std::snprintf 的安全美学与核心陷阱
开发语言·c++·安全
凡人叶枫1 小时前
Effective C++ 条款38:通过复合塑模出 has-a 或 \“根据某物实现出\
linux·开发语言·c++·windows
枫叶丹41 小时前
【HarmonyOS 6.0】MDM Kit:PC/2in1设备用户行为限制策略详解
开发语言·华为·harmonyos