Hallo Martin,
cool, danke, können wir so machen. Meine Testumgebung:
1. PHP-Version: 7.3.0 - apache 2.4.37 (Win32)
2. FB-Client-Version und "Bittigkeit" 3.0.4 33054 64 Bit
3. Betriebssystem und "Bittigkeit" Win7 / 64 und Win10 / 64
Der xampp-apache 32 Bit nutzt die 64-Bit fbclient ohne Probleme.
Und eine dll, die unter Win7 läuft, läuft doch auch unter Win10.
Grüße, Volker
Firebird + php 7: Bug im connect
Moderator: martin.koeditz
- martin.koeditz
- Beiträge: 500
- Registriert: Sa 31. Mär 2018, 14:35
Hi Volker,
habe noch nichts fehlerfreies. Musste mich erstmal intensiv in die PHP-Extension-Entwicklung einarbeiten. Alles habe ich noch immer nicht verstanden. Sobald ich aus dem Urlaub zurück bin kann ich dir aber sicherlich was anbieten. Also etwa zwei Wochen.
Gruß
Martin
habe noch nichts fehlerfreies. Musste mich erstmal intensiv in die PHP-Extension-Entwicklung einarbeiten. Alles habe ich noch immer nicht verstanden. Sobald ich aus dem Urlaub zurück bin kann ich dir aber sicherlich was anbieten. Also etwa zwei Wochen.
Gruß
Martin
Martin Köditz
SynDesk SW GmbH
SynDesk SW GmbH
Hi Martin,
alles klar, kein Stress. Ich baue übergangsweise doch unsere Anwendungen mit workarounds für php 7 um, so dass der Zeitdruck raus ist. Es kann gut sein, dass es mehr als 2 Wochen werden, bis der neue Treiber voll getestet ist und läuft.
noch schönen Urlaub
Grüße, Volker
alles klar, kein Stress. Ich baue übergangsweise doch unsere Anwendungen mit workarounds für php 7 um, so dass der Zeitdruck raus ist. Es kann gut sein, dass es mehr als 2 Wochen werden, bis der neue Treiber voll getestet ist und läuft.
noch schönen Urlaub
Grüße, Volker
- martin.koeditz
- Beiträge: 500
- Registriert: Sa 31. Mär 2018, 14:35
Hallo Volker,
ich denke, das Problem habe ich gelöst. Allerdings habe ich es noch nicht geschafft eine funktionierende Windows-Build-Umgebung zu bauen. Unter Linux ist das recht einfach, aber Windows ist da spezieller. Aber ich denke, dass ich das auch im Laufe der Woche schaffe, sodass du dann zum Wochenende hin eine passende Extension haben solltest.
Nutzt ihr auch persistente Verbindungen oder nur temporäre?
Gruß
Martin
ich denke, das Problem habe ich gelöst. Allerdings habe ich es noch nicht geschafft eine funktionierende Windows-Build-Umgebung zu bauen. Unter Linux ist das recht einfach, aber Windows ist da spezieller. Aber ich denke, dass ich das auch im Laufe der Woche schaffe, sodass du dann zum Wochenende hin eine passende Extension haben solltest.
Nutzt ihr auch persistente Verbindungen oder nur temporäre?
Gruß
Martin
Martin Köditz
SynDesk SW GmbH
SynDesk SW GmbH
Hallo Martin,
cool die Perspektive! Nee, wir nutzen nur die Einwegconnects (ibase_connect statt ibase_pconnect).
Die persistenten wären zwar super, wenn sie wirklich persistent wären, aber sind sie nicht, da der Webserver nur ähnliche Connects recycelt und meist neu connectet. Er hält eben nicht eine bestimmte connection offen, anders als bei desktop-Anwendungen. Dadurch kann man leider temp tables über Skriptlebensdauer hinaus nicht nutzen, also bei mehreren Requests der selben user/client-Session nutzlos.
Grüße, Volker
cool die Perspektive! Nee, wir nutzen nur die Einwegconnects (ibase_connect statt ibase_pconnect).
Die persistenten wären zwar super, wenn sie wirklich persistent wären, aber sind sie nicht, da der Webserver nur ähnliche Connects recycelt und meist neu connectet. Er hält eben nicht eine bestimmte connection offen, anders als bei desktop-Anwendungen. Dadurch kann man leider temp tables über Skriptlebensdauer hinaus nicht nutzen, also bei mehreren Requests der selben user/client-Session nutzlos.
Grüße, Volker
- martin.koeditz
- Beiträge: 500
- Registriert: Sa 31. Mär 2018, 14:35
Guten Morgen Volker,
ich habe eine ZIP-Datei mit zwei DLLs angehängt. Eine Thread-Safe, eine ohne. Bitte teste die passende mal.
Das folgende Skript habe ich zum Testen verwendet:
Ausgabe mit Original-DLL:
Hier sieht man das fehlerhafte Verhalten. Das Connection-Objekt $conn1 enthält eine nicht mehr gültige Referenz, weshalb es zum Fehler kommt.
Mit der neuen DLL sieht die Ausgabe so aus:
Das ist m.E. sehr vielversprechend. Also einfach mal prüfen und bitte kurze Rückmeldung.
Dank und Gruß
Martin
ich habe eine ZIP-Datei mit zwei DLLs angehängt. Eine Thread-Safe, eine ohne. Bitte teste die passende mal.
Das folgende Skript habe ich zum Testen verwendet:
Code: Alles auswählen
<?php
// Abfrage des aktuellen Zeichensatzes mittels SELECT
// auf der übergebenen Verbindung
function testQuery($conn, $name) {
echo "<br/>Starte Test für $name auf $conn \n<br/>";
$stmt = 'SELECT RDB$CHARACTER_SET_NAME AS CHARSET FROM rdb$database';
$sth = ibase_query($conn, $stmt);
while ($row = ibase_fetch_object($sth)) {
echo 'Hole Charset mittels Select für Verbindung: ' . $row->CHARSET, "\n<br/>";
}
ibase_free_result($sth);
ibase_close($conn);
echo "Test für $name abgeschlossen\n<br/>";
}
// Verbindungen
$alias = "10.1.12.200:test.fdb";
$aliasAlt = "10.1.12.200:test.fdb";
$usr = "sysdba";
$pw = "masterkey";
$charset = "utf-8";
$role = null;
// 1. Verbindung erstellen
$conn1 = ibase_connect($alias, $usr, $pw, $charset, 0, 3, $role);
if($conn1) {
print "Conn1 erfolgreich!\n<br/>";
}
else {
print "Conn1 fehlgeschlagen!\n<br/>";
echo ibase_errmsg();
}
testQuery($conn1, "Verbindung 1\n<br/>");
// 2. Verbindung erstellen
$conn2 = ibase_connect($aliasAlt, $usr, $pw, $charset, 0, 3, $role);
if($conn2) {
print "Conn2 erfolgreich!\n<br/>";
}
else {
print "Conn2 fehlgeschlagen!\n<br/>";
echo ibase_errmsg();
}
// 2. Verbindung testen
testQuery($conn2, "Verbindung 2");
// 1. Verbindung erneut testen
testQuery($conn1, "Verbindung 1 - erneut");
// 2. Verbindung erneut testen
testQuery($conn2, "Verbindung 2 - erneut");
?>
Code: Alles auswählen
Conn1 erfolgreich!
Starte Test für Verbindung 1
auf Resource id #2
Hole Charset mittels Select für Verbindung: UTF8
Test für Verbindung 1
abgeschlossen
Conn2 erfolgreich!
Starte Test für Verbindung 2 auf Resource id #4
Hole Charset mittels Select für Verbindung: UTF8
Test für Verbindung 2 abgeschlossen
Starte Test für Verbindung 1 - erneut auf Resource id #2
Warning: ibase_query(): supplied resource is not a valid Firebird/InterBase link resource in C:\xampp\htdocs\ibase\index.php on line 8
Warning: ibase_fetch_object() expects parameter 1 to be resource, bool given in C:\xampp\htdocs\ibase\index.php on line 9
Warning: ibase_free_result() expects parameter 1 to be resource, bool given in C:\xampp\htdocs\ibase\index.php on line 12
Test für Verbindung 1 - erneut abgeschlossen
Starte Test für Verbindung 2 - erneut auf Resource id #4
Hole Charset mittels Select für Verbindung: UTF8
Test für Verbindung 2 - erneut abgeschlossen
Mit der neuen DLL sieht die Ausgabe so aus:
Code: Alles auswählen
Conn1 erfolgreich!
Starte Test für Verbindung 1
auf Resource id #2
Hole Charset mittels Select für Verbindung: UTF8
Test für Verbindung 1
abgeschlossen
Conn2 erfolgreich!
Starte Test für Verbindung 2 auf Resource id #4
Hole Charset mittels Select für Verbindung: UTF8
Test für Verbindung 2 abgeschlossen
Starte Test für Verbindung 1 - erneut auf Resource id #2
Hole Charset mittels Select für Verbindung: UTF8
Test für Verbindung 1 - erneut abgeschlossen
Starte Test für Verbindung 2 - erneut auf Resource id #4
Hole Charset mittels Select für Verbindung: UTF8
Test für Verbindung 2 - erneut abgeschlossen
Dank und Gruß
Martin
- Dateianhänge
-
- php_interbase.zip
- Firebird-Extension für PHP 7.3.0-x86 VC15
TS und NTS - (60.25 KiB) 1663-mal heruntergeladen
Martin Köditz
SynDesk SW GmbH
SynDesk SW GmbH
Hallo Martin,
vielen Dank, teste sofort los.
Achtung! Schau Dir bitte auf firebird-devel den Thread vom 22.3.2019
[PHP-DEV] [RFC] Unbundle ext/interbase
an. Die php-Leute wissen anscheinend gar nicht, dass Du da schon länger dran bist. Bitte sag denen Bescheid, bevor das noch mehr anbrennt.
Viele Grüße, Volker
vielen Dank, teste sofort los.
Achtung! Schau Dir bitte auf firebird-devel den Thread vom 22.3.2019
[PHP-DEV] [RFC] Unbundle ext/interbase
an. Die php-Leute wissen anscheinend gar nicht, dass Du da schon länger dran bist. Bitte sag denen Bescheid, bevor das noch mehr anbrennt.
Viele Grüße, Volker
- martin.koeditz
- Beiträge: 500
- Registriert: Sa 31. Mär 2018, 14:35
Hallo Volker,
danke für den Hinweis. Bin da auch gerade drüber gestolpert. Habe nun einen "Brandbrief" geschickt. Mal sehen, was hier nun passiert.
Gruß
Martin
danke für den Hinweis. Bin da auch gerade drüber gestolpert. Habe nun einen "Brandbrief" geschickt. Mal sehen, was hier nun passiert.
Gruß
Martin
Martin Köditz
SynDesk SW GmbH
SynDesk SW GmbH
Hallo Martin,
habe die TS-Version getestet, sieht gut aus!
Bisher lief alles, parallele gleiche connections, auch alles andere, keine Äuffälligkeiten. Am neuen Treiber steht zwar 7.3.0 dran, er läuft aber auch in einem 7.3.2er xampp.
Jetzt: Es gibt neuerdings xampp in 64-Bit, könntest Du bitte noch die Versionen TS/NTS in 64-Bit erzeugen?
Vielen Dank schon mal. Ich feier das!
Grüße, Volker
ps: die zwei hier (nikic von php und Lester von Firebird, 22. und 23.3.2019) wissen auch nichts von Deinem neuen Treiber und Bugfix: https://bugs.php.net/bug.php?id=72175 und werkeln an eigenen Versionen. Kannste die zwei im Ticket mal aufklären bitte
Einem der php-Leute (Kalle, der mit dem RFC zum unbundeln) hab ich vorhin gemailt. Im Moment scheints darum zu gehen, dass alle mal auf den aktuellen Stand kommen.
habe die TS-Version getestet, sieht gut aus!
Bisher lief alles, parallele gleiche connections, auch alles andere, keine Äuffälligkeiten. Am neuen Treiber steht zwar 7.3.0 dran, er läuft aber auch in einem 7.3.2er xampp.
Jetzt: Es gibt neuerdings xampp in 64-Bit, könntest Du bitte noch die Versionen TS/NTS in 64-Bit erzeugen?
Vielen Dank schon mal. Ich feier das!
Grüße, Volker
ps: die zwei hier (nikic von php und Lester von Firebird, 22. und 23.3.2019) wissen auch nichts von Deinem neuen Treiber und Bugfix: https://bugs.php.net/bug.php?id=72175 und werkeln an eigenen Versionen. Kannste die zwei im Ticket mal aufklären bitte

Einem der php-Leute (Kalle, der mit dem RFC zum unbundeln) hab ich vorhin gemailt. Im Moment scheints darum zu gehen, dass alle mal auf den aktuellen Stand kommen.