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_sqlsrv 和 sqlsrv 扩展版本与当前系统架构不匹配
  • 某些二进制包只支持 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
相关推荐
承渊政道34 分钟前
【Python编程—从入门到实践】(记分与闯关:用Python+Pygame,打造越战越精彩的太空大战!)
开发语言·python·pycharm·游戏程序·pygame
爱学习的程序媛35 分钟前
Python常用框架梳理
开发语言·后端·python·ai·web·后端框架·python框架
火云代理1 小时前
更换网络后为什么会退出登录?分清 IP、Cookie 与会话的关系
服务器·网络·网络协议·tcp/ip·php·ip
eggwyw2 小时前
Anaconda安装卸载的详细流程指南
开发语言·python
火云代理5 小时前
同一个网站,有的网络能打开、有的打不开?认识 IPv4 与 IPv6 的访问差异
服务器·网络·网络协议·tcp/ip·测试工具·php·状态模式
another heaven7 小时前
【C/C++ Ranges 是零开销抽象吗?拆开管道、惰性求值和编译期膨胀】
c语言·开发语言·c++
SomeOtherTime8 小时前
Rust 闭包语法和原理(AI回答)
开发语言·后端·rust
apcipot_rain8 小时前
C++转Java日记(10)
java·开发语言
总要学点什么9 小时前
第105篇:三维特效-流动图片墙体效果——让箭头沿墙长滚,它俩竟是同一份代码
开发语言·javascript·ecmascript·gis·webgl·材质·cesium
xiaoye-duck9 小时前
《C++ 项目:手写大模型接入 SDK》会话模块整合:内存 SessionManager 与 DataManager 持久化联动
开发语言·数据库·c++·语言模型