PHP Yii2 安装SQL Server扩展-MAC M4 Pro芯片
MAC M4 Pro芯片版本,千锤百炼编译十几次终于成功
# 设置基础镜像并强制使用 x86_64 架构(适配 M4 芯片)
FROM --platform=linux/amd64 php:8.1-fpm-alpine3.18WORKDIR /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-alpineWORKDIR /var/www/htmlARG 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