Problem bei Zugriff vom Ubuntu-Server via PHP-Scripte auf FBDatenbank(Windows)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem bei Zugriff vom Ubuntu-Server via PHP-Scripte auf FBDatenbank(Windows)

    Hallo
    Ausgangssitution:
    man soll über I-net(URL) PHP-Scipte ausführen die auf eine local vorliegende Datenbank zugreifen.
    Die PhP-Scripte liegen auf einem Ubuntu-Hetzner-Server. Dieser von mir und einem Kollegen vor kurzem auf den aktuellesten Stand gebracht. Die Scipte versuchen über pdo_firebird auf die Datenbank zu zugreifen.
    Die Datenbank liegt momentan noch lokal auf meinem Laptop und soll später wenn alles zuverlässigläuft auf unseren lokalen Server umziehen.

    Wenn ich die Datenbank auf dem Hetzner lagere und von dort aus die angepassten scripte ausführe funktioniert alles. Die Ausgabe erfolgt wie gewünscht.

    Wenn ich die Datenbank von meinem Laptop aus ausführe oder mit IBExpert öffne gibt es auch keine Probleme(ersteres nehme ich an da ich sie hier geschrieben habe, vor knapp einem viertel Jahr).

    Das Problem liegt aber bei der eigentlichen Idee:
    Steuer ich von hier aus über den Mozilla die URL mit den parametern an und gebe als verbindung meine Lokale Datenbank in den scripten(Scripte liegen aufm dem Hetzner) an so scheitert das ganze und schmeist mir folgende Fehlermeldung raus:

    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [335544379] unsupported on-disk structure for file C:\FIRMAPLAY_funktioniert.GDB; found 32779.10, support <Missing arg #4 - possibly status vector overflow>.<Missing arg #5 - possibly status vector overflow>' in /var/www/test/getcoworkerlist.php:30 Stack trace: #0 /var/www/test/getcoworkerlist.php(30): PDO->__construct('firebird:dbname...', 'SYSDBA', 'masterkey') #1 {main} thrown in /var/www/test/getcoworkerlist.php on line 30
    Ich hab nun schon versucht den Pfad oder die verbindung zu ändern was man an dem Script durch die Kommentare sieht, aber das führt nur zur gescheiterten Verbindungsherstellung.

    Mein Script:
    PHP-Code:
    <html>
            <head>
                    <title>
                            getcoworkerlist
                    </title>
            </head>
            <body>
                    <?php
                            
    //mittels url wird die variable ï¿½bergeben

                                    /*      type kann folgende Inhalte haben:
                                            offline(Wert 0)
                                            free(Wert 1)
                                            busy(Wert 2)
                                    */
                            
    $aid=$_GET["aid"];
                            
    //$ausnahme_datum= "1900-01-01 00:00:00";

                            
    require_once("befehle.php");
                            
    //require_once("connection.php");

                            //define("DB_HOST", "10.8.0.6");
                            //define("DB_USER", "SYSDBA");
                            //define("DB_PASSWORD", "masterkey");
                            //define("DB_NAME","C:\\Apache2.2\\htdocs\\FIRMAPLAY_funktioniert.GDB");

                            //$database = new PDO("firebird:dbname=" . DB_NAME . ":" . DB_HOST . "","" . DB_USER . "", "" . DB_PASSWORD . "");
                            //$database = new PDO ($str_conn, "SYSDBA", "masterkey");
                            //$str_conn = "firebird:dbname=10.8.0.6:C:\\FIRMAPLAY_funktioniert.gdb;";
                            
    $database = new PDO("firebird:dbname=10.8.0.6:C:\\FIRMAPLAY_funktioniert.GDB","SYSDBA","masterkey");
                            
    $database->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);

                            
    db_abfrage($database);

                            switch(
    $_GET["servicestatus"]){
                                    case 
    "offline":
                                            
    $sql="SELECT * FROM VW_SERVICE WHERE (\"SERVICEAID\"=$aid) AND (\"SERVICESTATUS\"=0)";
                                            break;

                                    case 
    "free":
                                            
    $sql="SELECT * FROM VW_SERVICE WHERE (\"SERVICEAID\"=$aid) AND (\"SERVICESTATUS\"=1)";
                                            break;

                                    case 
    "busy":
                                            
    $sql="SELECT * FROM VW_SERVICE WHERE (\"SERVICEAID\"=$aid) AND (\"SERVICESTATUS\"=2)";

                                    case 
    "freeandbusy":
                                            
    $sql="SELECT * FROM VW_SERVICE WHERE (\"SERVICEAID\"=$aid) AND ((\"SERVICESTATUS\"=1) OR (\"SERVICESTATUS\"=2))";
                                            break;

                                    case 
    "all":
                                            
    $sql="SELECT * FROM VW_SERVICE WHERE (\"SERVICEAID\"=$aid) AND (\"SERVICESTATUS\">=0)";
                                            break;
                            }

                            echo 
    '</br></br>';
                            foreach(
    $database->query($sql) as $key => $entry)
                                    {
                                            echo (
    '"' $entry['ID'] . '", "' $entry['MITARBEITERNAME'] .'", "' $entry['SERVICEIP'] .'"; ');
                                    };
                            
    ?>
            </body>
    </html>
    Laut Recherche und ratschlägen von kollegen soll es an einem Versionsunterschied zwischen Datenbank und Client liegen. Dabei frag ich mich aber warum ich sie dann in den einzelnen Systemen starten kann.
    Auf dem Hetzner läuft aktuell pdo_firebird in der version 2.5. auf meinem Laptop läuft Firebird 2.5. Die datenbank hab ich bis jetzt immer mit Firebird 2.0 in der Datenbank registriert.
    Wichtig wäre vllt auch noch das ich einen OPENVpn Tunnel zwischen dem Server und dem Lokalen Laptop laufen lasse.
    Die funktioniert eigentlich reibungslos.

    Ich wäre sehr dankbar für denkanstöße oder sogar lösungen.

    Beste Grüße
    Zuletzt geändert von ; 12.12.2011, 16:38.

  • #2
    Zitat von Jiraiya Beitrag anzeigen
    ...

    Wenn ich die Datenbank auf dem Hetzner lagere und von dort aus die angepassten scripte ausführe funktioniert alles. Die Ausgabe erfolgt wie gewünscht.
    Welchen DSN verwendest du dort? Irgendwie kommt der, den du im Quelltext angegeben hast, nicht ganz koscher vor.

    Wenn ich die Datenbank von meinem Laptop aus ausführe oder mit IBExpert öffne gibt es auch keine Probleme(ersteres nehme ich an da ich sie hier geschrieben habe, vor knapp einem viertel Jahr).
    Gleiche Fragestellung: Was unterscheidet den hierbei verwendeten DSN vom im Beispiel-Code angebenen?

    Steuer ich von hier aus über den Mozilla die URL mit den parametern an und gebe als verbindung meine Lokale Datenbank in den scripten(Scripte liegen aufm dem Hetzner) an so scheitert das ganze und schmeist mir folgende Fehlermeldung raus: ...
    Mein Script:
    PHP-Code:
    // ...
    $database = new PDO(
        
    "firebird:dbname=10.8.0.6:C:\\FIRMAPLAY_funktioniert.GDB",
        
    "SYSDBA",
        
    "masterkey"
    );
    // ... 
    Bei den Beispiel-DSNs im Handbuch werden dbname= und host= getrennt angegeben (oder gar kein host, aber das nützt dir hier ja nichts). Ich frage mich, was passiert, wenn du einen Phantasie-Pfad angibst, der nicht existiert. Kommt dann die gleiche Exception? Das wäre ein Indiz, dass der Client den Datenbankserver nicht findet.

    Laut Recherche und ratschlägen von kollegen soll es an einem Versionsunterschied zwischen Datenbank und Client liegen.
    So sagt die Fehlermeldung.[0] Aber siehe meine letzte Frage.

    Dabei frag ich mich aber warum ich sie dann in den einzelnen Systemen starten kann.
    Auf dem Hetzner läuft aktuell pdo_firebird in der version 2.5. auf meinem Laptop läuft Firebird 2.5. Die datenbank hab ich bis jetzt immer mit Firebird 2.0 in der Datenbank registriert. ...
    Hmm, der DB-Client auf dem Hetzner-Server hat die gleiche Versionsnummer wie der DB-Server dort (2.5). Beide verstehen sich. Wenn jetzt der Client von dort auf deinen Laptop zugreift und dort einen Server vorfindet, dessen Fileformat er nicht versteht, dann kommt mir das auch komisch vor. Was ich nicht verstehe (ich kenne Firebird nur von der Online-Dokumentation) ist, wieso ein Dateisystem-Pfad zu einer Datei ('C:\...') angegeben werden muss. Der Host und der Name der Datenbank sollten doch reichen ...

    --
    [0] Peinlich: Gerade habe ich auf firebirdfaq.org diese Fehlermeldung gesehen:
    Warning: mysql_connect(): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111) in .../html/firebirdfaq.org/ads/connect.php on line 2 Neuspesna konekcija na server.
    (Hervorhebung von mir)
    Zuletzt geändert von fireweasel; 19.12.2011, 23:04.
    Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

    Kommentar

    Lädt...
    X