Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
## v1.1.0 Under Development

- Enh #32 Update to PHP `8.5` (@terabytesoftw)
- Bug #33 Build `sqlsrv/pdo_sqlsrv` in full image on PHP `8.5` using `BuildKit-mounted` scripts (@terabytesoftw)

## v1.0.0 September 13, 2025

Expand Down
40 changes: 3 additions & 37 deletions src/flavor/apache/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# syntax=docker/dockerfile:1.7
#==============================================================================
# Yii2 Docker - Debian Trixie + PHP 8.5 FPM + Apache with HTTP/2
# Supports: full (testing), dev (development), prod (production)
Expand Down Expand Up @@ -167,8 +168,6 @@ RUN install-php-extensions \
#------------------------------------------------------------------------------
FROM dev AS full

SHELL ["/bin/bash", "-o", "pipefail", "-c"]

# Layer 07: Full extensions
RUN install-php-extensions \
oci8 \
Expand All @@ -177,41 +176,8 @@ RUN install-php-extensions \

# Layer 08: Microsoft SQL Server support
# Note: Using Debian 12 (bookworm) repo since Trixie (13) is not yet officially supported by Microsoft
# hadolint ignore=DL3003,SC2153
RUN set -ex \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
curl \
gnupg \
ca-certificates \
&& curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg \
&& echo 'deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/microsoft-prod.gpg] https://packages.microsoft.com/debian/12/prod bookworm main' > /etc/apt/sources.list.d/mssql-release.list \
&& apt-get update \
&& ACCEPT_EULA=Y apt-get install -y --no-install-recommends msodbcsql18 \
&& read -r -a phpize_deps <<< "${PHPIZE_DEPS}" \
&& apt-get install -y --no-install-recommends unixodbc unixodbc-dev "${phpize_deps[@]}" \
&& printf '\\n' | pecl install sqlsrv-5.12.0 \
&& PHP_VERSION_ID="$(php -r 'echo PHP_VERSION_ID;')" \
&& if [[ "${PHP_VERSION_ID}" -ge 80500 ]]; then \
cd /tmp \
&& pecl download pdo_sqlsrv-5.12.0 \
&& tar -xf pdo_sqlsrv-5.12.0.tgz \
&& rm -f pdo_sqlsrv-5.12.0.tgz \
&& cd pdo_sqlsrv-5.12.0 \
&& sed -i 's/= dbh->error_mode/= (enum pdo_error_mode) dbh->error_mode/' pdo_dbh.cpp \
&& sed -i 's/zval_ptr_dtor( &dbh->query_stmt_zval );/OBJ_RELEASE(dbh->query_stmt_obj);dbh->query_stmt_obj=NULL;/' php_pdo_sqlsrv_int.h \
&& phpize \
&& ./configure --with-php-config="$(command -v php-config)" \
&& make -j"$(nproc)" \
&& make install \
&& rm -rf /tmp/pdo_sqlsrv-5.12.0; \
else \
printf '\\n' | pecl install pdo_sqlsrv-5.12.0; \
fi \
&& docker-php-ext-enable sqlsrv pdo_sqlsrv \
&& apt-get purge -y --auto-remove gnupg unixodbc-dev "${phpize_deps[@]}" \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN --mount=type=bind,source=src/script/build,target=/opt/build,ro \
/bin/bash /opt/build/10-mssql-php-ext.sh

#==============================================================================
# Production Build
Expand Down
15 changes: 15 additions & 0 deletions src/script/build/01-mssql-odbc.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/bash
set -euo pipefail

mssql_add_apt_repo() {
apt-get update
apt-get install -y --no-install-recommends ca-certificates curl gnupg

curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
echo 'deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/microsoft-prod.gpg] https://packages.microsoft.com/debian/12/prod bookworm main' >/etc/apt/sources.list.d/mssql-release.list
}

mssql_install_odbc_runtime() {
apt-get update
ACCEPT_EULA=Y apt-get install -y --no-install-recommends msodbcsql18 unixodbc
}
46 changes: 46 additions & 0 deletions src/script/build/10-mssql-php-ext.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#!/bin/bash
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/01-mssql-odbc.sh"

main() {
mssql_add_apt_repo
mssql_install_odbc_runtime

read -r -a phpize_deps <<<"${PHPIZE_DEPS:-}"
apt-get install -y --no-install-recommends unixodbc-dev "${phpize_deps[@]}"

printf '\n' | pecl install sqlsrv-5.12.0

local php_version_id
php_version_id="$(php -r 'echo PHP_VERSION_ID;')"

if [[ "${php_version_id}" -ge 80500 ]]; then
cd /tmp
pecl download pdo_sqlsrv-5.12.0
tar -xf pdo_sqlsrv-5.12.0.tgz
rm -f pdo_sqlsrv-5.12.0.tgz

cd pdo_sqlsrv-5.12.0

sed -i 's/= dbh->error_mode/= (enum pdo_error_mode) dbh->error_mode/' pdo_dbh.cpp
sed -i 's/zval_ptr_dtor( &dbh->query_stmt_zval );/OBJ_RELEASE(dbh->query_stmt_obj);dbh->query_stmt_obj=NULL;/' php_pdo_sqlsrv_int.h

phpize
./configure --with-php-config="$(command -v php-config)"
make -j"$(nproc)"
make install
rm -rf /tmp/pdo_sqlsrv-5.12.0
else
printf '\n' | pecl install pdo_sqlsrv-5.12.0
fi

docker-php-ext-enable sqlsrv pdo_sqlsrv

apt-get purge -y --auto-remove gnupg unixodbc-dev "${phpize_deps[@]}"
apt-get clean
rm -rf /var/lib/apt/lists/* /tmp/pear /tmp/* /var/tmp/*
}

main "$@"