Zur Zeit programmiere ich einen Zugriff auf unseren ADS-Datenbankserver, um damit Abfragen zu schreiben und zu exportieren.
Über den Aufruf meiner Skripte per DOS-Konsole hat das bisher ohne Probleme geklappt. Ich bediene mich der PHP-PEAR-Klassen:
require_once (‚DB.php‘);
error_reporting(E_ALL);
$dsn = ‚odbc:///f991‘; // DSN-Name
$dbODBC = DB :: connect($dsn); // CONNECT herstellen
if (true == DB :: isError($dbODBC))
{
die($dbODBC->getMessage());
}
else
{
echo „Connect erfolgreich“;
}
Als Output erhalte ich: „DB Error: connect failed“
Wenn ich es allerdings vom DOS-Fenster aus starte, geht es ohne Probleme und die Verbindung wird hergestellt:
v:\XAMPP\php\php.exe“ „index.php“
Erst dachte ich, es liegt vielleicht daran, dass XAMPP als Dienst läuft und ODBC nicht auf Benutzer-DSNs zugreifen kann und habe es als System-DSN angelegt.
Ergebnis: Das Gleiche, von DOS gehts, aber von einem Webserver nicht.
Daraufhin habe ich mal das ODBC-Objekt wie folgt näher ausgegeben
PHP-Code:
print_r($dbODBC);
und das hat das folgende Ergebnis gebracht:
Auschnitt aus Output:
Zitat:
[nativecode=HY000 [iAnywhere Solutions][Advantage SQL][ASA] Error 5185: Local server connections are restricted in this environment. See the 5185 error code documentation for details. axServerConnect] |
Dadurch bin ich auf den folgenden Link gestoßen:
Advantage Database Architect über Remote Desktop � Das nie endende Chaos!
Ich bin so frei und zitiere daraus:
Zitat:
Wenn der Advantage Database Architect beim Öffnen einer Tabelle die Fehlermeldung „Error 5185: Local server connections are restricted in this environment. See the 5185 error code documentation for details. axServerConnect.“ bringt, dann muss nur eine Datei ADS.INI im Verzeichnis der Tabelle mit diesem Inhalt angelegt werden:
[SETTINGS]
MTIER_LOCAL_CONNECTIONS=1 |
Allerdings hat diese Änderung bei mir leider nicht zum erwünschten Ergebnis geführt. Wenn jemand von Euch noch eine Idee hat, ich werde auch weitersuchen und die Lösung, so ich sie finde, hier veröffentlichen.
Ein bisschen googlen brachte mich dann darauf, dass ich möglicherweise ein Lizenzproblem habe:
Zitat:
IMPORTANT
Pursuant to iAnyWhere’s licensing agreement, … if an application is distributed to work without the Advantage Database Server (i.e., it uses the Advantage Local Server to access data), the application must act as a „client“ that directly accesses and uses the data. To be specific, only computers that have the Advantage Local Server DLL loaded into memory can have access to the data that is obtained by that Advantage Local Server DLL. The application cannot act as „middleware“ or as a „server“ by having the data forwarded by any means to a separate computer. In other words, it is illegal to use the Advantage Local Server with a Web server, an application server, a terminal server, or any other type of middleware or server product to access data on behalf of remote computers. An Advantage Database Server (a.k.a. remote server) product must be purchased and used to allow this SOFTWARE PRODUCT to access data on behalf of applications running on remote computers. |
Der ADS-Server verhindert aus lizenzrechtlichen Gründen den Zugriff von Webservern auf die Datenbank. Aus diesem Grund funktioniert das PHP-Modul nicht. Wie man es dafür aber zum Laufen bekommt, ist mir unbekannt. Gelöst habe ich das Problem nicht, aber umgangen habe ich es, indem ich ein Modul programmiert habe, welches die ADS-Datenbanktabellen in MySQL überträgt.
Eine weitere PHP-Library führt über ODBC die Anfragen aus und speichert die Ergebnisse serialisiert in der Datenbank ab, so dass der Webserver auf diese zugreifen kann.