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