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
相关推荐
汽车功能安全啊1 小时前
利用对称算法及非对称算法实现安全启动
java·开发语言·安全
Flobby5292 小时前
Go语言新手村:轻松理解变量、常量和枚举用法
开发语言·后端·golang
nbsaas-boot3 小时前
SQL Server 窗口函数全指南(函数用法与场景)
开发语言·数据库·python·sql·sql server
东方佑3 小时前
递归推理树(RR-Tree)系统:构建认知推理的骨架结构
开发语言·r语言·r-tree
Warren983 小时前
Java Stream流的使用
java·开发语言·windows·spring boot·后端·python·硬件工程
伍哥的传说3 小时前
Radash.js 现代化JavaScript实用工具库详解 – 轻量级Lodash替代方案
开发语言·javascript·ecmascript·tree-shaking·radash.js·debounce·throttle
xidianhuihui4 小时前
go install报错: should be v0 or v1, not v2问题解决
开发语言·后端·golang
架构师沉默4 小时前
Java优雅使用Spring Boot+MQTT推送与订阅
java·开发语言·spring boot
DebugKitty5 小时前
C语言14-指针4-二维数组传参、指针数组传参、viod*指针
c语言·开发语言·算法·指针传参·void指针·数组指针传参
Bio Coder5 小时前
R语言中 read.table 和 read.delim 之间的区别
开发语言·r语言