mirror of
https://github.com/danog/docker-php-extension-installer.git
synced 2024-12-12 09:29:56 +01:00
Merge pull request #265 from mlocati/sqlsrv
Install Microsoft ODBC Drivers when using sqlsrv / pdo_sqlsrv
This commit is contained in:
commit
3ab860ad2c
@ -1,4 +1,6 @@
|
|||||||
enchant !7.2-alpine3.12 !7.3-alpine3.12 !7.4-alpine3.12
|
enchant !7.2-alpine3.12 !7.3-alpine3.12 !7.4-alpine3.12
|
||||||
parallel zts
|
parallel zts
|
||||||
|
pdo_sqlsrv !7.0-alpine3.7 !7.1-alpine3.7 !7.1-alpine3.8 !7.2-alpine3.7 !7.2-alpine3.8 !7.3-alpine3.8
|
||||||
pthreads zts
|
pthreads zts
|
||||||
|
sqlsrv !7.0-alpine3.7 !7.1-alpine3.7 !7.1-alpine3.8 !7.1-alpine3.9 !7.1-alpine3.10 !7.2-alpine3.7 !7.2-alpine3.8 !7.3-alpine3.8
|
||||||
tdlib !alpine3.7 !jessie
|
tdlib !alpine3.7 !jessie
|
||||||
|
@ -667,14 +667,6 @@ buildRequiredPackageLists() {
|
|||||||
buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libpq5"
|
buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libpq5"
|
||||||
buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libpq-dev"
|
buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libpq-dev"
|
||||||
;;
|
;;
|
||||||
pdo_sqlsrv@alpine)
|
|
||||||
buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++ unixodbc"
|
|
||||||
buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile unixodbc-dev"
|
|
||||||
;;
|
|
||||||
pdo_sqlsrv@debian)
|
|
||||||
buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libodbc1 odbcinst"
|
|
||||||
buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile unixodbc-dev"
|
|
||||||
;;
|
|
||||||
pgsql@alpine)
|
pgsql@alpine)
|
||||||
buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent postgresql-libs"
|
buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent postgresql-libs"
|
||||||
buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile postgresql-dev"
|
buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile postgresql-dev"
|
||||||
@ -772,13 +764,16 @@ buildRequiredPackageLists() {
|
|||||||
buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libcurl3-gnutls"
|
buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libcurl3-gnutls"
|
||||||
buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libcurl4-gnutls-dev libxml2-dev"
|
buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile libcurl4-gnutls-dev libxml2-dev"
|
||||||
;;
|
;;
|
||||||
sqlsrv@alpine)
|
sqlsrv@alpine | pdo_sqlsrv@alpine)
|
||||||
buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++ unixodbc"
|
buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libstdc++ unixodbc"
|
||||||
buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile unixodbc-dev"
|
buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile unixodbc-dev"
|
||||||
;;
|
;;
|
||||||
sqlsrv@debian)
|
sqlsrv@debian | pdo_sqlsrv@debian)
|
||||||
buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent unixodbc"
|
buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent unixodbc"
|
||||||
buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile unixodbc-dev"
|
buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile unixodbc-dev"
|
||||||
|
if ! isMicrosoftSqlServerODBCInstalled; then
|
||||||
|
buildRequiredPackageLists_volatile="$buildRequiredPackageLists_volatile gnupg apt-transport-https"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
ssh2@alpine)
|
ssh2@alpine)
|
||||||
buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libssh2"
|
buildRequiredPackageLists_persistent="$buildRequiredPackageLists_persistent libssh2"
|
||||||
@ -1170,6 +1165,41 @@ installOracleInstantClient() {
|
|||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Check if the Microsoft SQL Server ODBC Driver is installed
|
||||||
|
#
|
||||||
|
# Return:
|
||||||
|
# 0 (true): if the string is in the list
|
||||||
|
# 1 (false): if the string is not in the list
|
||||||
|
isMicrosoftSqlServerODBCInstalled() {
|
||||||
|
test -d /opt/microsoft/msodbcsql*/
|
||||||
|
}
|
||||||
|
|
||||||
|
# Install the Microsoft SQL Server ODBC Driver
|
||||||
|
installMicrosoftSqlServerODBC() {
|
||||||
|
printf 'Installing the Microsoft SQL Server ODBC Driver\n'
|
||||||
|
case "$DISTRO" in
|
||||||
|
alpine)
|
||||||
|
# https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server#alpine17
|
||||||
|
rm -rf /tmp/src/msodbcsql.apk
|
||||||
|
curl -sSLf -o /tmp/src/msodbcsql.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.6.1.1-1_amd64.apk
|
||||||
|
printf '\n' | apk add --allow-untrusted /tmp/src/msodbcsql.apk
|
||||||
|
rm -rf /tmp/src/msodbcsql.apk
|
||||||
|
;;
|
||||||
|
debian)
|
||||||
|
# https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server#debian17
|
||||||
|
printf -- '- installing the Microsoft APT key\n'
|
||||||
|
curl -sSLf https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
|
||||||
|
if ! test -f /etc/apt/sources.list.d/mssql-release.list; then
|
||||||
|
printf -- '- adding the Microsoft APT source list\n'
|
||||||
|
curl -sSLf https://packages.microsoft.com/config/debian/$DISTRO_VERSION_NUMBER/prod.list >/etc/apt/sources.list.d/mssql-release.list
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt-get -q update
|
||||||
|
fi
|
||||||
|
printf -- '- installing the APT package\n'
|
||||||
|
DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get -qy install '^msodbcsql[0-9]+$'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
# Install Composer
|
# Install Composer
|
||||||
installComposer() {
|
installComposer() {
|
||||||
installComposer_version="$(getWantedPHPModuleVersion @composer)"
|
installComposer_version="$(getWantedPHPModuleVersion @composer)"
|
||||||
@ -1681,6 +1711,9 @@ installRemoteModule() {
|
|||||||
installRemoteModule_version=5.8.1
|
installRemoteModule_version=5.8.1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
if ! isMicrosoftSqlServerODBCInstalled; then
|
||||||
|
installMicrosoftSqlServerODBC
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
propro)
|
propro)
|
||||||
if test -z "$installRemoteModule_version"; then
|
if test -z "$installRemoteModule_version"; then
|
||||||
|
28
scripts/tests/pdo_sqlsrv
Executable file
28
scripts/tests/pdo_sqlsrv
Executable file
@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
error_reporting(-1);
|
||||||
|
|
||||||
|
set_error_handler(
|
||||||
|
static function ($errno, $errstr, $errfile, $errline) {
|
||||||
|
$msg = "Error {$errno}: {$errstr}\n";
|
||||||
|
if ($errfile) {
|
||||||
|
$msg .= "File: {$errfile}\n";
|
||||||
|
if ($errline) {
|
||||||
|
$msg .= "Line: {$errline}\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fwrite(STDERR, $msg);
|
||||||
|
exit(1);
|
||||||
|
},
|
||||||
|
-1
|
||||||
|
);
|
||||||
|
|
||||||
|
try {
|
||||||
|
new PDO('sqlsrv:server=localhost; Authentication=SqlPassword; ConnectRetryCount=0; Database=example; LoginTimeout=1', 'userName', 'password');
|
||||||
|
} catch (PDOException $x) {
|
||||||
|
if (stripos($x->getMessage(), 'This extension requires the Microsoft ODBC Driver for SQL Server') !== false) {
|
||||||
|
fwrite(STDERR, trim($x->getMessage() . "\n"));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
39
scripts/tests/sqlsrv
Executable file
39
scripts/tests/sqlsrv
Executable file
@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/env php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
error_reporting(-1);
|
||||||
|
|
||||||
|
set_error_handler(
|
||||||
|
static function ($errno, $errstr, $errfile, $errline) {
|
||||||
|
$msg = "Error {$errno}: {$errstr}\n";
|
||||||
|
if ($errfile) {
|
||||||
|
$msg .= "File: {$errfile}\n";
|
||||||
|
if ($errline) {
|
||||||
|
$msg .= "Line: {$errline}\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fwrite(STDERR, $msg);
|
||||||
|
exit(1);
|
||||||
|
},
|
||||||
|
-1
|
||||||
|
);
|
||||||
|
|
||||||
|
sqlsrv_connect(
|
||||||
|
'localhost, 50000',
|
||||||
|
[
|
||||||
|
'Authentication' => 'SqlPassword',
|
||||||
|
'ConnectRetryCount' => 0,
|
||||||
|
'Database' => 'example',
|
||||||
|
'LoginTimeout' => 1, // string for PDO_SQLSRV
|
||||||
|
'UID' => 'userName', // not for PDO_SQLSRV
|
||||||
|
'PWD' => 'password',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
$errors = sqlsrv_errors(SQLSRV_ERR_ALL);
|
||||||
|
if (is_array($errors)) {
|
||||||
|
foreach ($errors as $error) {
|
||||||
|
if (isset($error['message']) && stripos($error['message'], 'This extension requires the Microsoft ODBC Driver for SQL Server') !== false) {
|
||||||
|
fwrite(STDERR, trim($error['message']) . "\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user