如何在 DDEV-Local 中安装 SQL Server PHP 驱动程序?

wiz*_*ons 2 php sql-server ddev

我正在开发一个 DDEV-Local 项目,我需要用于 PHP(sqlsrvpdo_sqlsrv)的 SQL Server 驱动程序。如何将它们添加到其 Web 容器中?我不能使用额外的包配置,因为它需要添加外部存储库。

wiz*_*ons 6

此答案已针对 ddev v1.14.1+ 更新。

将此添加Dockerfile.ddev/web-build

ARG BASE_IMAGE
FROM $BASE_IMAGE
COPY install_sqlsrv.sh /tmp/
RUN apt-get update && DEBIAN_FRONTEND=noninteractive sudo apt-get install -y -o Dpkg::Options::="--force-confold" --no-install-recommends --no-install-suggests gcc make autoconf libc-dev pkg-config php-pear
RUN /bin/bash /tmp/install_sqlsrv.sh
Run Code Online (Sandbox Code Playgroud)

并将此脚本另存为.ddev/web-build/install_sqlsrv.sh

#!/bin/bash
# This script installs MSSQL server. Contains some ddev-specific tweaks:
# - doesn't add ondrej's repo because that's already added
# - doesn't source .bashrc because that will happen anyway.
# - doesn't restart Apache; it's not started at this point.
# - assumes it's being run under sudo anyway and doesn't use sudo or su or exit
# - tries to run apt update as few times as possible
# - Apache's mpm_event module is already disabled.
#   Those don't work well with Docker builds.
# https://docs.microsoft.com/en-us/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-2017#step-1-install-php-2
# Some of these packages will be redundant.
export DEBIAN_FRONTEND=noninteractive
# Install sqlsrv drivers.
export PHP_VERSIONS="php7.0 php7.1 php7.2 php7.3"
# Note: Only works for PHP 7.0+.
export PHP_SUFFIXES="7.0 7.1 7.2 7.3"

# https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-2017
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
#Download appropriate package for the OS version
#Choose only ONE of the following, corresponding to your OS version
#Debian 9
curl https://packages.microsoft.com/config/debian/9/prod.list >/etc/apt/sources.list.d/mssql-release.list &&
  apt-get update
apt-get install -y curl apt-transport-https
for v in $PHP_VERSIONS; do
  apt-get install -y "$v" "$v"-dev "$v"-xml
done
ACCEPT_EULA=Y apt-get install -y msodbcsql17
# optional: for bcp and sqlcmd
ACCEPT_EULA=Y apt-get install -y mssql-tools
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >>~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >>~/.bashrc
# optional: for unixODBC development headers
apt-get install -y unixodbc-dev

# https://docs.microsoft.com/en-us/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-2017#step-3-install-the-php-drivers-for-microsoft-sql-server
# See /sf/ask/2829380291/
for v in $PHP_SUFFIXES; do
  pecl -d php_suffix="$v" install sqlsrv
  pecl -d php_suffix="$v" install pdo_sqlsrv
  # This does not remove the extensions; it just removes the metadata that says
  # the extensions are installed.
  pecl uninstall -r sqlsrv
  pecl uninstall -r pdo_sqlsrv
done
for v in $PHP_SUFFIXES; do
  printf "; priority=20\nextension=sqlsrv.so\n" >/etc/php/"$v"/mods-available/sqlsrv.ini
  printf "; priority=30\nextension=pdo_sqlsrv.so\n" >/etc/php/"$v"/mods-available/pdo_sqlsrv.ini
  chmod 666 /etc/php/"$v"/mods-available/*sqlsrv*.ini
done
phpenmod sqlsrv pdo_sqlsrv

# Step 4 skipped because Apache is already configured.
# Step 5 skipped because Apache is not started at this point.

# Reduce image size some.
rm -rf /var/lib/apt/lists/*
Run Code Online (Sandbox Code Playgroud)

然后再跑ddev start一次。

注意:这需要几分钟的时间来构建。您可以通过从 Bash 脚本顶部的变量中删除不使用的 PHP 版本来加快速度。

请参阅脚本中的注释,了解指令的来源以及如何调整它们以与 ddev 一起使用。

  • 更新 2020-05-13 以确保 pecl 存在并使用来自 MS 的 Debian 10 源 (3认同)