Für manche Projekte braucht man ein etwas ausgefallenes Setup. So ist die Kombination aus Microsoft-SQL-Server und dem Zugriff aus einer PHP-Webseite absolut kein Standard. Da die Datenbank, aus welcher die Daten benötigt werden, in meinem Fall aber nur als MS-SQL-Datenbank vorliegt, muss man schauen, wie man das ganze zum Zusammenspiel bringt. Zusätzlich soll diese Webseite auch nicht auf dem Windows-Server laufen, sondern auf einer eigenständigen Maschine in einem Apache. Da es unnötig wäre hierfür noch eine Windows-Server-Lizenz zu verschleudern, muss der Apache dann auch noch in einer Linux-VM betrieben werden 😉
Als erstes habe ich Ubuntu Server 16.04 LTS in einer VM installiert. Danach geht es mit folgenden Schritten weiter:
Apache installieren:
1 |
sudo apt-get install apache2 |
Da PHP7 Verbindungen zu MS-SQL nicht mehr unterstützt, fällt dieses leider raus! Da PHP5 dies kann, aber in den offiziellen Paketquellen von Ubuntu nicht mehr enthalten ist, muss eine weitere Paketquelle hinzugefügt werden.
Repository für PHP5 hinzufügen:
1 2 |
sudo add-apt-repository ppa:ondrej/php sudo apt-get update |
Alle nötigen PHP-Module installieren:
1 |
sudo apt-get install php5.6 php-gettext php5.6-mbstring php-xdebug libapache2-mod-php5.6 php5.6-curl php5.6-gd php5.6-mcrypt php5.6-xml php5.6-xmlrpc |
Für die Anbindung an die MS-SQL-Datenbank wird noch der FreeTDS-Treiber als “Zwischenschicht” benötigt, der Zugriff auf die Datenbank findet dann später mittels PDO (PHP Data Object) statt.
Freetds installieren:
1 2 |
sudo apt-get install php5.6-sybase freetds-common libsybdb5 sudo apache2ctl restart |
Hierdurch wird FreeTDS und die Library für den Apache installiert. Warum auch immer, ist diese Library nicht, wie es der Name vermuten lässt, nur für Sybase-SQL sondern auch für MS-SQL. Das muss man auch erst einmal wissen 😉
Um die Verbindung zur Datenbank aus PHP aufzubauen wird ein PDO in der PHP-Anwendung erstellt:
Um den korrekten Weg für den Aufbau der Datenbank-Verbindung heraus zu finden sind einige Stunden ins Land gegangen, denn wie so oft im deutschsprachigen Raum benötigt man UTF8 und dies muss beim Aufbau der Datenbankverbindung dem Server mitgeteilt werden. Leider funktionierten von den ca. 20 Lösungen, die ich dafür bei meiner Recherche fand, keine bis auf die oben gezeigte.
Ganz wichtig ist es aber, möglichst kein UnixODBC zu benutzen! Bei ein paar Projekten habe ich dies versucht und bin damit immer schnell an Grenzen bzgl. der Performance gestoßen und kam aufgrund der wirklich miesen Dokumentation nicht sehr weit. Dies war beispielsweise bei einer OTRS-Installation der Fall, wo die Kombination Perl unter Linux/Apache und MS-SQL realisiert werden sollte. Dazu habe ich damals auch einige Arbeitsstunden verbraten und auch im OTRS-Forum um Hilfe gefragt, wo die Meinung eindeutig gegen UnixODBC ausgefallen ist.
Die Einstellungen in der oben gelb hervorgehobenen Zeile entsprechen hierbei den Konfigurationen die man in der freetds.conf-Datei für ein Verbindungsprofil vornehmen kann:
Wie in der Grafik beschrieben, umgeht man durch die Konfiguration innerhalb des PDO-Objekts die FreeTDS-Konfigurationsdatei. Diese braucht man also für den Datenbankzugriff über PDO gar nicht anpassen.