В продолжение предыдущего псто. Таки заставил я работать этот несчастный MSSQL-драйвер для PHP7. Это называется "среди багов нащупал дорогу".
Во-первых, отвечаю на вопрос из комментов, почему не годится PDO_DBLIB. Наш программист говорит, что он слишком неинформативен. То есть, ему по долгу службы и в соответствии с принятой парадигмой построения решений приходится формировать сложные навороченные SQL-запросы. И в "стандартном" механизме "коробочных" PHP-коннекторов нет никакой возможности отследить, а не возникло ли какой-нибудь ошибки в процессе выполнения этого запроса. Стандартный пример: посылаем в одном запросе два SELECT-а, один из существующей таблицы, второй — из несуществующей. В зависимости от порядка следования этих SELECT-ов мы можем либо получить, либо не получить ссылку на результирующий Dataset. И единственной возможностью контролировать всё это дело является парсинг stdout-а от SQL Server-а на предмет наличия в нём Warning-ов, зачастую совершенно неинформативных. Что ни разу не удобно. Поэтому меня и попросили подключить "родной" ODBC-шный коннектор.
Далее, краткая инфа и ссылки, чтобы прежде всего самому потом не забыть как это делается. Речь идёт о дистрибутиве Debian 9 (Stretch) amd64.
Во-первых, 7-ая "пыха" полноценно появилась только в Stretch-е. И раз уж решено с оным связываться, то городить смесь из стабильного и тестируемого дистрибутива нет никакого смысла. Проще уж сразу целиком разворачивать тестируемый. Баги попадаются, да. Но по мере приближения к релизу их всё меньше. Во-вторых, MS принципиально отказалась от поддержки i386, так что придется брать amd64. И даже если каким-то макаром удастся собрать сам PHP-коннектор из исходников, то вот ODBC-драйвер по-любому придется ставить бинарный. Может я плохо искал, но сырцов его я пока не встретил.
Теперь о подводных камнях. Вроде бы по зависимостям там ничего особо экзотического нет. Но нужно иметь в системе установленные пакетики: libcurl3, unixodbc и внезапно... libssl1.0.0 из репозитория Jessie. Вот так неочевидно, ага. Со штатными libssl1.0.2 и libssl1.1 оно заводиться не хочет, требует обязательно версию потухлее. Еще из неочевидных моментов — нужно позаботиться о том, чтобы в системе присутствовала локаль "en_US.UTF-8". Без неё почему-то никак и никуда. Также если SQL-сервер слушает на нестандартном порту, то в строке подключения его нужно указывать через запятую, а не через двоеточие.
Где брать.
- На момент написания этого псто актуальной версией ODBC-библиотеки была 13-ая. Подходит от 16-ой убунты. Ссылки на DEB-пакеты: раз, два. Ставятся "как обычно", дополнительных зависимостей с сайта MS за собой не тянут, работают "из коробки".
- Сами PHP-шные коннекторы. Бинарники тут (версия релиза 4.0.8). В архиве лежит четыре разных библиотеки: "обычная", PDO (PHP Data Object), "NTS" (non thread-safe) и "TS" (thread-safe). Зачем они так собирают непонятно, потому что для Linux-а thread-safe версии неактуальны.
Так что берем из архива "php_sqlsrv_7_nts.so", редактируем права на доступ к файлу, копируем в "/usr/lib/php/20151012/" и создаем ini-конфиги для подключения модуля в "/etc/php/7.0/mods-available", а также символические ссылки на них. Вроде больше ничего шаманить не надо. Если же что-то не работает, то проверяем выхлоп команд
ldd /usr/lib/php/20151012/php_sqlsrv_7_nts.so
ldd /opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.1.so.4.0
на предмет нехватающих библиотек.
Эх, чего только не сделаешь для этих беспомощных программистов... (шутка)