seit Ende 2018 ist ja php 5 Geschichte und wer es noch nicht getan hat, muss jetzt auf php 7 umstellen. Leider gibt es im native Firebird-Treiber von php einen üblen Bug ausgerechnet in der connect-Funktion ibase_connect https://bugs.php.net/bug.php?id=72175, der dazu führt, dass bereits geöffnete Connections zur gleichen Datenbank geschrotet werden. Das lässt sich reproduzieren mit Code wie
Code: Alles auswählen
// 1.
$conn = ibase_connect($alias, $usr, $pw, $charset, 0, 3, $role);
$conn2 = ibase_connect($alias, $usr, $pw, $charset, 0, 3, $role);
// $conn ist jetzt ungültig!
// 2.
$conn = ibase_connect($alias, $usr, $pw, $charset, 0, 3, $role);
do_some_admin_task();
// $conn ist jetzt ungültig. Und obwohl das zweite connect
// sogar in einem anderen scope stattfand
// und in einer anderen Variable den link unterbringt!
function do_some_admin_task () {
// Als admin zur gleichen DB connecten, zb, um mon$-Tabellen abzufragen
...
$conn2 = ibase_connect($alias, $admusr, $admpw, $charset, 0, 3, $role);
}
Ist jemand von euch auch davon betroffen? Als halbgaren workaround habe ich in der databases.conf einen weiteren Alias auf die selbe DB angelegt, aber das skaliert natürlich nicht.
Im Moment scheint es wohl daran zu hängen, dass es keinen Maintainer für den Firebird-Treiber mehr gibt, die php-Leute hätten den Treiber schon fast rausgeworfen. Ich hab vor kurzem mit der Firebird-Stiftung Kontakt aufgenommen, denn eine Firma, für die ich arbeite, hat etwas Förderung (1000 Euro) für den Bugfix angeboten, evtl falls nötig in einem zweiten Schritt die Umstellung des connects auf die neue Ressourcenverwaltung von php 7. Perspektivisch wärs gut, wenn sich jemand ab und zu um den Treiber kümmern könnte, normalerweise muss man da über lange Zeiträume nicht ran.
Beim Firebird-ODBC-Treiber fährt die Firebird-Stiftung ein solches Modell, da gibt es jemanden, der sich kümmert, und die Firebird-Stiftung unterstützt das. Wärs Delphi, würde ich es selber machen, habe ganz selten den (erstklassigen) native UIB-Delphi-Treiber für Firebird gefixt/erweitert. Aber C kann ich nicht genug, und von php-Interna und dem build eines php-Systems hab ich keine Ahnung.
Kennt ihr jemanden, der sich gut mit C und php und Firebird- (oder allgemein Datenbank-)Treibern auskennt? Und/oder habt ihr die Möglichkeit, dass eure Firmen sich an der Förderung beteiligen?
Es wäre fatal, wenn die aktuelle php-Version nur mit einem buggy Firebird-connect zu haben wäre oder wenn irgendwann der Firebird-Treiber ganz rausfliegt. Firebird über ODBC ist kein vollwertiger Ersatz, weil dort einige Firebird-Besonderheiten nicht umsetzbar sind. Das gleiche gilt für Firebird-pdo.
Was meint ihr?
Grüße, Volker