PHP 7.3 oder 7.4 und Firebird PDO Zugang

Forum für neue Firebird-Anwender.

Moderator: thorben.braun

Antworten
waldi969
Beiträge: 4
Registriert: Fr 3. Jul 2020, 12:15

Hallo an alle,

ich verzweifele gerade an meinem Problem.

Ich bin Anfänger im programmieren und lerne mit einem PHP Kurs. Dort wird empfohlen, wenn möglich einen PDO Treiber zu nutzen.

Ich habe nun in meiner Docker Umgebung Nginx, PHP7.3 (ich nehme auch 7.4), MySQL8 und PHPMyAdmin laufen.

Mit MySQL klappt alles prima. Ich habe aber beruflich ein Programm mit Firebird Datenbank im Hintergrund eines Programmes. Bisher konnte ich meine Daten auch immer gut auslesen.

Jetzt, mit PHP 7.3.19 und PDO klappt es nicht mehr.

Mit dem Code:

Code: Alles auswählen

$pdofb = new \PDO($server, $user, $passw, [\PDO::ATTR_CASE => \PDO::CASE_LOWER, \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION]);
  
  $pdofb->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
  
  } catch (PDOException $e) {
  print "Error!: " . $e->getMessage() . "<br/>";
  die();
}
kommt die Meldung

Code: Alles auswählen

Error!: could not find driver
Wie bekomme ich einen Firebird-Treiber in die PHP Installation?

Vielen Dank für Eure Hilfe

Waldi969
Benutzeravatar
martin.koeditz
Beiträge: 440
Registriert: Sa 31. Mär 2018, 14:35

Hallo Waldi969,

das klingt sehr nach fehlender PHP-Extension. diese findest du üblicherweise unter /usr/lib64/php7/extensions. Kann je nach Distribution abweichen. Welches Betriebssystem ist im Einsatz?

Solltest du Ubuntu oder ein ähnliches Derivat einsetzen, kann der Treiber mit folgendem Befehl nachinstalliert werden:

Code: Alles auswählen

sudo apt-get install -y php-pdo-firebird.
Danach noch prüfen, ob die Erweiterung in der php.ini oder einer entsprechenden conf-Datei (meist unter /etc/php7/conf.d) aktiviert wurde.

Danach Web-Dienst neustarten und prüfen, ob der Treiber geladen wurde. Dies funktioniert am besten über Aufruf der PHP-Funktion phpinfo().

Wichtig ist auch, dass die Firebird-Client-Bibliothek (fbclient.so) installiert ist.

Gruß
Martin
Martin Köditz
it & synergy GmbH
waldi969
Beiträge: 4
Registriert: Fr 3. Jul 2020, 12:15

Hallo Martin,

danke für deine Hilfe.

Ich benutze einen Ubuntu Server 20.04 mit Docker Containern.

Dort habe ich zur Entwicklung von Programmen mehrer Container mit Nginx, PHP, MYSQL installiert und gestartet.

PHP läuft mit php7.3-fpm auf einem Debian 10.4 Container mit dem offiziellen PHP Container https://hub.docker.com/_/php

Wenn ich die Erweiterung im Dockerfile installiere, kommt beim Build folgende Meldung

Code: Alles auswählen

 RUN docker-php-ext-install pdo_firebird
 ---> Running in 4c6824f76cef
Configuring for:
PHP Api Version:         20180731
Zend Module Api No:      20180731
Zend Extension Api No:   320180731
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for a sed that does not truncate output... /bin/sed
checking for cc... cc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether cc accepts -g... yes
checking for cc option to accept ISO C89... none needed
checking how to run the C preprocessor... cc -E
checking for icc... no
checking for suncc... no
checking whether cc understands -c and -o together... yes
checking for system library directory... lib
checking if compiler supports -R... no
checking if compiler supports -Wl,-rpath,... yes
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
checking for PHP prefix... /usr/local
checking for PHP includes... -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib
checking for PHP extension directory... /usr/local/lib/php/extensions/no-debug-non-zts-20180731
checking for PHP installed headers prefix... /usr/local/include/php
checking if debug is enabled... no
checking if zts is enabled... no
checking for re2c... re2c
checking for re2c version... 1.1.1 (ok)
checking for gawk... no
checking for nawk... nawk
checking if nawk is broken... no
checking for Firebird support for PDO... yes, shared
checking for fb_config... no
checking for isc_detach_database in -lfbclient... no
checking for isc_detach_database in -lgds... no
checking for isc_detach_database in -lib_util... no
configure: error: libfbclient, libgds or libib_util not found! Check config.log for more information.
ERROR: Service 'php' failed to build: The command '/bin/sh -c docker-php-ext-install pdo_firebird' returned a non-zero code: 1

Wenn ich mich mit root auf dem Terminal des PHP Containers anmelde, und die Erweiterung manuell installieren möchte, kommt:

Code: Alles auswählen

apt-get install -y php-pdo-firebird.
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package php-pdo-firebird.
E: Couldn't find any package by glob 'php-pdo-firebird.'
E: Couldn't find any package by regex 'php-pdo-firebird.'

Hast du noch eine Idee?

Mfg Thomas
Benutzeravatar
martin.koeditz
Beiträge: 440
Registriert: Sa 31. Mär 2018, 14:35

Hi,

offenbar will Docker die Erweiterung selbst kompilieren. In der vorletzten Zeile steht, dass die fblient-Bibliothek fehlt.
configure: error: libfbclient, libgds or libib_util not found! Check config.log for more information.
Installiere zuerst die Firebird-Bibliothek (ggf. den Firebird-Server) und die Entwicklungspakete zu Firebird. Danach nochmals den Build-Prozess starten.

Gruß
Martin
Martin Köditz
it & synergy GmbH
waldi969
Beiträge: 4
Registriert: Fr 3. Jul 2020, 12:15

Hallo Martin,

danke für deine Hilfe.

Ich habe das Problem so gelöst.

Zuerst

Code: Alles auswählen

RUN apt-get -y install firebird-dev 
und dann

Code: Alles auswählen

RUN docker-php-ext-install pdo_firebird
dann läuft die Installation durch und ich habe die Firebird PDO Erweiterung in meiner phpinfo stehen. Das klappt mit PHP 7.3 und 7.4.

Vielen Dank!

VG Waldi969
waldi969
Beiträge: 4
Registriert: Fr 3. Jul 2020, 12:15

Der untere Eintrag wurde durch Änderung des Datenbank Eintrages gelöst. Es klappt
Hallo nochmal,

zu früh gefreut.

Die Installation in Docker läuft durch.

In meiner phpinfo steht:

Bild

Die Meldung bleibt aber gleich!

Code: Alles auswählen

Error!: could not find driver
Wobei das Error!: aus meinem Code stammt.

Könnte es sein, dass es Probleme zur Version 3 (firebird-dev und pdo_firebird) gibt? Auf unserem Server läuft Version 2.5.5

VG

Waldi969
Benutzeravatar
martin.koeditz
Beiträge: 440
Registriert: Sa 31. Mär 2018, 14:35

Hallo Waldi969,

kann deiner Ausführung nicht ganz folgen. Klappt der Zugriff nun oder gibt es noch offene Punkte.

Viele Grüße
Martin
Martin Köditz
it & synergy GmbH
Antworten