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
相关推荐
求一个demo2 分钟前
Qt5.14.2配置MSVC2017
开发语言·qt
Yyyy4823 分钟前
LVS三种模式及原理
服务器·php·lvs
西阳未落17 分钟前
C++基础(22)——模板的进阶
开发语言·c++
waves浪游17 分钟前
C++模板进阶
开发语言·c++
七夜zippoe23 分钟前
微服务配置中心高可用设计:从踩坑到落地的实战指南(二)
微服务·架构·php
你的电影很有趣1 小时前
lesson68:JavaScript 操作 HTML 元素、属性与样式全指南
开发语言·前端·javascript
苏琢玉1 小时前
作为 PHP 开发者,我第一次用 Go 写了个桌面应用
node.js·go·php
熊猫_豆豆1 小时前
MATLAB画出湖面波纹相遇所形成的现象
开发语言·matlab·仿真
JaguarJack1 小时前
PHP 8.2 vs PHP 8.3 对比:新功能、性能提升和迁移技巧
后端·php
花心蝴蝶.1 小时前
Java 中的代理模式
java·开发语言·代理模式