Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Interbase XE3 server via PHP (https://www.delphipraxis.net/185046-interbase-xe3-server-via-php.html)

stefanhtt 11. Mai 2015 10:30

Datenbank: InterBase • Version: XE3 • Zugriff über: PHP

Interbase XE3 server via PHP
 
Hallo,

ich habe das Problem, dass ich auf einen Interbase XE3 server zugreifen muss via PHP und bekomme es einfach nicht hin.

follgendes habe ich versucht:

ibase_connect (via Firebird 2.5):


Code:

$db = 'localhost:D:\xxx\xxx.IB';
$username='SYSDBA';
$password='masterkey';
 
$dbh = ibase_connect ( $db, $username, $password ) or die ("errors in db connect");
Fehlermeldung: Warning: ibase_connect(): unsupported on-disk structure for file D:\xxx\xxx.IB; found 11.2, support 11.2 in C:\xampp\htdocs\index.php on line 11

Des weiteren habe ich natürlich das Problem, wenn gleichzeitig eine Verbindung mit der IBConsole besteht, dass dann sofort ein IO-Fehler kommt. Deshalb würde mir die Lösung nicht gefallen.

des weiteren habe ich versucht das ganze mittels ODBC laufen zu lassen und habe den Treiber ODBC von Embarcadero installiert. Dann natürlich meinen PHP-Code abgeändert:

Code:
$user = 'SYSDBA';
$pass = 'masterkey';
$server = 'localhost:D:\xxx\xxx.IB';

// No changes needed from now on
$connection_string = "DRIVER=InterBase ODBC driver; UID=SYSDBA; PWD=masterkey; DBNAME=localhost:D:\xxx\xxx.IB;";

$conn = odbc_connect($connection_string,$user,$pass);

if ($conn) {
    echo "Connection established.";
} else{
    die("Connection could not be established.");
}

das liefert mir dann:
Warning: odbc_connect(): SQL error: [ODBC InterBase Driver]connection rejected by remote interface, SQL state 08004 in SQLConnect in C:\xampp\htdocs\index.php on line 42
Connection could not be established.

Mache ich grundsätzlich was falsch?

Gibt es eine Möglichkeit via PHP direkt mit dem Interbase XE3 Server zu kommunitzieren oder ginge das nur mittes Firebird Server und auf die Datenbankdatei?

ich hoffe es kann mir jemand helfen!

Danke Stefan

Nersgatt 11. Mai 2015 15:26

AW: Interbase X3 server via PHP
 
Zitat:

Zitat von stefanhtt (Beitrag 1300991)
Fehlermeldung: Warning: ibase_connect(): unsupported on-disk structure for file D:\xxx\xxx.IB; found 11.2, support 11.2 in C:\xampp\htdocs\index.php on line 11

Ich hab zwar von PHP überhaupt keine Ahnung. Aber ich kann Dir sagen, dass die Meldung darauf hinweist, dass die Datenbankdatei mit einer neueren Version von Interbase (Firebird) erstellt wurde, als die Clientlibrary, mit der zu versuchst drauf zuzugreifen, verarbeiten kann.
Oder die installierte Serverversion passt nicht zu der Datei.

Perlsau 11. Mai 2015 17:09

AW: Interbase X3 server via PHP
 
Also ich hab irgendwie den Eindruck, man versucht mittels einer Firebird-Library auf einen Interbase-Server zuzugreifen. Interbase und Firebird sind jedoch nicht dasselbe und haben sich bereits vor längerer Zeit auseinanderentwickelt.

stefanhtt 11. Mai 2015 19:57

AW: Interbase X3 server via PHP
 
Hallo,

Danke euch fur die Antwort!

Zitat:

Aber ich kann Dir sagen, dass die Meldung darauf hinweist, dass die Datenbankdatei mit einer neueren Version von Interbase (Firebird) erstellt wurde, als die Clientlibrary, mit der zu versuchst drauf zuzugreifen, verarbeiten kann.
Zitat:

Also ich hab irgendwie den Eindruck, man versucht mittels einer Firebird-Library auf einen Interbase-Server zuzugreifen. Interbase und Firebird sind jedoch nicht dasselbe und haben sich bereits vor längerer Zeit auseinanderentwickelt.
Aus den beiden Kommentaren schließe ich mal, dass Firebird Library mit InterBase_DB Datei nicht kompatibel sind! Es ist nämlich schwer das definitiv herauszufinden, da viele Beiträge im Internet Verbindung mit InterBase beschreiben und damit aber Firebird meinen (war ja mal eins)

Kann mir jemand bestätigen, dass das nicht geht? Dann kann ich nämich aufhören zu versuchen ;-)

zur 2. Idee den ODBC Trieber zu benutzen. Hat da jemand eine Idee warum das nicht geht. Passt der DNS connecting String nicht?

LG und Danke

Stefan

IBExpert 11. Mai 2015 20:56

AW: Interbase X3 server via PHP
 
du kommst auch mit einem aktuellen Firebird Client auf nahezu alle Interbase Versionen, sofern du bei Blob und Interbase speziellen Datentypen vorsichtig bist. Wir nutzen das regelmäßig, um die letzten Interbase Kunden so nach und nach auf Firebird umzustellen (Wir gehen dabei direkt aus der Firebird Datenbank via execute statement on external auf Interbase, ist aber für dich hier erst mal nicht wichtig, wenn du bei Interbase bleiben willst oder musst).

Wichtig ist dabei aber, das du einen connectionstring am besten mit port nutzt, um dich mit dem interbase server zu verbinden (z.B. 1.2.3.4/3050:C:\pfad\db.gdb oder ähnlich. Der Instanzname von Interbase, sofern benutzt, statt /3050 hilft dir nicht weiter. Nimm den tcp/ip port
(standard 3050).

Wenn du auf der selben Kiste Interbase und Firebird parallel installiert hast, könnte es sein, das die sich auf 3050 in die quere kommen. stelle dann ggf den firebird port in der firebird.conf unter remoteserviceport auf einen anderen port und starte die kiste neu.

du kommst auch mit pdo und dem firebird client dann auf interbase, wenn der connection string passt

hier ein Beispiel Quellcode einer minimal php Anwendung aus unseren Powerworkshops
Code:
<?php

    try
     {
       $dbh = new PDO("firebird:dbname=localhost/3050:c:\db\barcode.fdb", "SYSDBA", "masterke");


       $dbh->beginTransaction();
       
       $sql = "SELECT txt FROM IBEWEB('";
       $sql .= $_POST["CMD"];
       $sql .= "','";
       $sql .= implode("#",$_POST);
       $sql .= "#";
       $sql .= implode("#",$_GET);
       $sql .= "','";
       $sql .= $_SERVER["REMOTE_ADDR"];
       $sql .= "')";
       foreach ($dbh->query($sql) as $row)
        {
          print $row['TXT'] . '';
        }

       $dbh->commit();
     }   
    catch (PDOException $e)
     {
       echo $e->getMessage();
     }
    $dbh=null;
?>

stefanhtt 11. Mai 2015 21:12

AW: Interbase X3 server via PHP
 
Danke für den Hinweis, habs auch gleich probiert, habe aber schon folgende bekannte Fehlermeldung bekommen

SQLSTATE[HY000] [335544379] unsupported on-disk structure for file D:\xxx\xxx.IB; found 11.2, support 11.2

Wenn ich mit interbase XE3 eine neue Datenbak erstelle, bekomme ich beim Versuch mich zu verbinden den fehler:

SQLSTATE[HY000] [335544379] unsupported on-disk structure for file D:\xxx\xxx.IB; found 15.0, support 11.2

LG

Stefan

IBExpert 11. Mai 2015 21:18

AW: Interbase X3 server via PHP
 
das sieht weiterhin nach einer kraut und rüben installation aus. ods 11.2 ist firebird 2.5 und ods 15 interbase xe
wichtig: hängt in deiner php/apache installation evtl ein nicht passender interbase client (gds32.dll oder fbclient.dll)

bereinige am besten erst mal alle versionen dieser dateien auf deinem rechner und legt die dann die wirklich gewollte version in der suchpfad ganz nach vorne das wo path hinzeigt)

bei 64 Bit maschinen und 32 Bit clients kann das noch komplizierter sein wegen syswow64

stefanhtt 11. Mai 2015 21:59

AW: Interbase X3 server via PHP
 
Zitat:

das sieht weiterhin nach einer kraut und rüben installation aus. ods 11.2 ist firebird 2.5 und ods 15 interbase xe
Das würde ja eh passen, ods 15--> ist eine TestDB die ich mit der IBConsole des installierten Interbase XE3 Server erstellt habe, beim versuch mit dieser zu conecten bekomme ich ja das Found 15.0 support 11.2

mit was die Originale Datenbank erstellt wurde, weiß ich nicht. Hatte zuerst den Fehler "found 11.2 support 11.0" da firebird 2.0 drauf war. Hab dann alle Files des firebird mit denen der Firebird 2.5 getauscht. Ich habe keine DLLs in den System32 Ordner gelegt etc.

Webserver ist Win8.1 --> XAMPP, Apache 2.4, PHP 5.6.8, firebird 2.5, interbase XE3 64bit
Hab in der PHP.ini:

extension=php_pdo_firebird.dll
extension=php_pdo_firebird.dll

aktiviert.Fertig, mehr nicht!

Achja, InterBase XE3 ist noch mit Testlizenz falls das was ändert

LG

Stefan

stefanhtt 17. Mai 2015 17:03

AW: Interbase X3 server via PHP
 
Hallo,

habe heute einen Fehler lokalisieren können. Es hat der Firebird-Server statt der InterBase XE3 Server geantwortet, obwohl ich das Port in der firebird.conf auf 3051 geändert hatte. Habe den Prozess firebird Server nun einfach gekillt und ich bekomme nun eine andere Fehlermeldung, der ich aber auch nicht Herr werde.

bei PDO: SQLSTATE[HY000] [335544472] Your user name and password are not defined. Ask your database administrator to set up a Firebird login.

wenn ich es mittels ibase_connect() versuche: ibase_connect(): Your user name and password are not defined. Ask your database administrator to set up a Firebird login.

Bitte um weiterer Mithilfe

lg

Stefan

Perlsau 17. Mai 2015 20:47

AW: Interbase X3 server via PHP
 
Was die Fehlermeldung bedeutet, ist dir aber schon irgendwie klar, oder? Wenn nicht, sag ich's dir nochmal:

Der Username und das Passwort sind nicht definiert. Das bedeutet, daß deine Datenbank mit einer Username-Password-Kombination angelegt (oder restored) wurde, die dein Interbase-Server nicht kennt. Es gibt aber wie in Firebird auch eine Default-Kombination, wie man z.B. dort nachlesen kann:

User ID: SYSDBA
Password: masterkey

Da ich Interbase nicht verwende – es gibt ja den kostenlosen Firebird-Server –, weiß ich nicht, wie man hier einen neuen User anlegt. Wenn du jedoch in deiner Anwendung die beiden Properties für User und Password entsprechend änderst, sollte sich die Datenbank damit öffnen lassen. Wie man die Default-Einstellungen ändert, fand ich dort:

gsec –user sysdba –password masterkey
modify sysdba –pw newpassword

Ansonsten kann ich dir nur empfehlen, Tante Google zu fragen (genau das habe ich eben auch getan) und deine Interbase-Dokumentation, die ja bei jeder RadStudio- und Delphi-Distribution dabei ist, zu Rate zu ziehen. Vermutlich kannst du mit dem beiliegenden Programm IbConsole neue User anlegen, aber ganz sicher geht das mit dem oben bereits erwähnten gsec. Wie das genau geht, steht mit Sicherheit in deiner Dokumentation. Ich kann hier nur aufgrund meiner Firebird-Kenntnisse vermuten. Um mit deinem Interbase-Server zu arbeiten, solltest du dich unbedingt damit vertraut machen. Informationen findest du garantiert auch bei Embarcardero, wo ich eben z.B. auch diese PDF-Datei fand. Darin steht z.B. unter

PART I: GETTING STARTED
CREATING A NEW USER

sehr genau beschrieben, wie man einen neuen Server-User anlegt.

Das alles hättest du auch leicht selbst herausfinden können.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:04 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz