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

发布于:2025-07-03 ⋅ 阅读:(16) ⋅ 点赞:(0)

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


网站公告

今日签到

点亮在社区的每一天
去签到