Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [PHP/Firebird] Zugriff (https://www.delphipraxis.net/36841-%5Bphp-firebird%5D-zugriff.html)

MrSpock 26. Dez 2004 22:31


[PHP/Firebird] Zugriff
 
Hallo PHP Experten,

wie kann ich unter Linux mit PHP auf eine Firebird Datenbank zugreifen?

kiar 26. Dez 2004 22:58

Re: [PHP/Firebird] Zugriff
 
hallo spocky,

aktuallisiere bitte deine delphiversion :mrgreen:

schon mal in den newsgroups nachgeschaut?
da sollte auf jeden fall was zu finden sein.
ausserdem mal im entwicklerforum schauen.

ein neidischer raik

edit// noch diesen link gefunden, weis aber nicht ob der mit linux geht
edit2 : ich muss natürlich auch noch den link dazu geben :wall:
http://www.entwickler-forum.de/webx?...go.2@.2cb7dc10

MrSpock 27. Dez 2004 09:25

Re: [PHP/Firebird] Zugriff
 
Hallo kiar,

ich warte erst noch, bis ich die neue SW erfolgreich installiert habe, bevor ich meine Version anpasse. :hello:

Der Link hat mir noch nicht weitergeholfen. Habe natürlich vorher schon gesucht und an einigen Stellen die Aussage gefunden, dass PHP ab Version 4 den Firebird Support schon eingebaut hat. Außerdem habe ich diese Seite gefunden, die alle IB Funktionen beschreibt.

Ich habe aber auch gelesen, dass ich eine ".inc" oder ".php" Datei bräuchte, die die Interbase Funktionen zur Verfügung stellt und die finde ich nicht.

Duffy 27. Dez 2004 09:28

Re: [PHP/Firebird] Zugriff
 
Hallo MrSpock,
http://de3.php.net/manual/de/ref.ibase.php

bye
Claus

Jelly 27. Dez 2004 09:30

Re: [PHP/Firebird] Zugriff
 
Zitat:

Zitat von MrSpock
ich warte erst noch, bis ich die neue SW erfolgreich installiert habe, bevor ich meine Version anpasse. :hello:

Yoh, du bist der Glückspilz aus dem Delphi-Forum... Glückwunsch meinerseits...

Zu deiner Frage,
wenn du schon mal mit PHP und MySQL gearbeitet hast, ists ganz einfach. Lediglich in deinen Befehlen das MySQL durch ibase austauschen (ibase_Connect etc.). Wenn du Glück hast, klappts sofort, wenn nicht, musst du in deiner .conf Datei noch das Interbase Modul laden... Einfach mal nach Interbase drin suchen, und das Semicolon vor der Zeile entfernen, und den Apache neu starten.

Marcel Gascoyne 28. Dez 2004 13:43

Re: [PHP/Firebird] Zugriff
 
In den meisten Linux-Distributionen, wie z.b. SuSE ist PHP ohne Firebird Support dabei. Um nun PHP mit Firebird zum Laufen zu bekommen mache ich es bisher immer so das ich weder Apache noch PHP mitinstalliere.

Wir brauchen nun folgende Zustaten für unsere Installation:

1.) Apache Quellcode (http://httpd.apache.org)
2.) PHP Quellcode (http://de.php.net)

Als erstes entpacken wir den Apache Quellcode und compilieren uns den Webserver:

Zitat:

root@linux-entw:/usr/src> tar xvfz apache_1.3.33.tar.gz
root@linux-entw:/usr/src> cd apache_1.3.33
root@linux-entw:/usr/src/apache_1.3.33> ./configure --prefix=/usr/local/httpd --enable-rule=SHARED_CORE --enable-module=so --enable-module=rewrite
root@linux-entw:/usr/src/apache_1.3.33> make
root@linux-entw:/usr/src/apache_1.3.33> make install
Nun wird PHP entpackt und entsprechend konfiguriert, compiliert und installiert:

Zitat:

root@linux-entw:/usr/src> tar xvfz php-4.3.10.tar.gz
root@linux-entw:/usr/src> cd php-4.3.10
root@linux-entw:/usr/src/php-4.3.10> ./configure --prefix=/usr/local/php --with-apxs=/usr/local/httpd/bin/apxs --with-zlib --with-bz2 --with-gd --with-jpeg-dir --with-png-dir --with-gettext --with-interbase=/opt/firebird --with-mysql --with-pear --enable-experimental-zts --with-config-file-path=/etc
root@linux-entw:/usr/src/php-4.3.10> make
root@linux-entw:/usr/src/php-4.3.10> make install
root@linux-entw:/usr/src/php-4.3.10> cp php.ini-recommended /etc/php.ini
Nun ist in der Datei /usr/local/httpd/conf/httpd.conf das PHP Modul einzutragen und der
Handler zu registrieren:

Zitat:

...
#
# DirectoryIndex: Name of the file or files to use as a pre-written HTML
# directory index. Separate multiple entries with spaces.
#
<IfModule mod_dir.c>
DirectoryIndex index.html index.php
</IfModule>
...
# Example:
# LoadModule foo_module libexec/mod_foo.so
LoadModule php4_module libexec/libphp4.so
...
#
# To enable type maps, you might want to use
#
#AddHandler type-map var

# PHP
AddType application/x-httpd-php php

...
Ggf. können noch anpassungen in der PHP Konfigurationsdatei /etc/php.ini vorgenommen werden.
Der Apache mit PHP- und Firebird Support kann nun gestartet werden: /usr/local/httpd/bin/apachectl start

Gruß,
Marcel

MrSpock 28. Dez 2004 20:24

Re: [PHP/Firebird] Zugriff
 
Hallo Marcel,

ich habe bereits XAMPP 1.1.4 installiert und möchte natürlich nicht alles wieder runterwerfen. Welche Einstellungen muss ich denn nachträglich in der php.ini ändern, damit ich auf firebird zugreifen kann?

@Jelly: Funktioniert leider nicht. Der Aufruf:

Code:
 <?php
   $host = 'localhost:/opt/firebird/examples/employee.fdb';
    $username='SYSDBA';
    $password='masterkey';
    $dbh = ibase_connect ( $host, $username, $password ) or die ("error in db connect");
wird mit der Meldung:

Zitat:

Warning: ibase_connect(): Connection lost to pipe server operating system directive stat failed No such file or directory in /opt/lampp/htdocs/fbtest.php on line 10
error in db connect
quittiert. Die Datei /opt/firebird/examples/employee.fdb existiert aber auf meinem Rechner.

fiasko 28. Dez 2004 22:13

Re: [PHP/Firebird] Zugriff
 
Hallo,

eine Zeile mit:

extension=interbase.so

sollte reichen wenn das interbase Modul dabei ist (ist so üblich). Dein Skript kann das auch selber laden mit der dl Funktion.

MrSpock 28. Dez 2004 22:28

Re: [PHP/Firebird] Zugriff
 
Hallo fiasko,

ich hatte bereits eine Zeile:

extension=php_interbase.so

und habe jetzt noch einmal deine Zeile

extension=interbase.so

hinzugefügt.

Ich habe aber weder eine Datei php_interbase.so noch eine Datei interbase.so in meinem /opt/lampp Verzeichnis!?

By the way: Wenn ich Änderungen an der php.ini mache, muss ich dann php neu starten und falls ja, wie geht das am einfachsten?

fiasko 28. Dez 2004 22:50

Re: [PHP/Firebird] Zugriff
 
Hallo,

meine Zeile ist auch für eine Debian GNU/Linux Sarge Installation... so viel anders kann das bei lampp auch nicht sein...

Zitat:

Zitat von MrSpock
Ich habe aber weder eine Datei php_interbase.so noch eine Datei interbase.so in meinem /opt/lampp Verzeichnis!?

dann sieht es danach aus das in dieser lampp Distri das Modul nicht mit reinkompiliert wurde :gruebel:
Da ich xampp nicht verwende kann ich dir da leider auch nicht weiterhelfen :-(



Zitat:

Zitat von MrSpock
By the way: Wenn ich Änderungen an der php.ini mache, muss ich dann php neu starten und falls ja, wie geht das am einfachsten?

Wenn das PHP als Apache Modul läuft kommt man wohl um ein Neustart der Apachen nicht rum.

Marcel Gascoyne 29. Dez 2004 07:01

Re: [PHP/Firebird] Zugriff
 
Zitat:

Zitat von MrSpock
Hallo Marcel,

ich habe bereits XAMPP 1.1.4 installiert und möchte natürlich nicht alles wieder runterwerfen. Welche Einstellungen muss ich denn nachträglich in der php.ini ändern, damit ich auf firebird zugreifen kann?

Es muss das PHP Modul php_interbase.so vorhanden sein. Liegt normalerweise im PHP Unterverzeichnis extensions.

Falls dies bei Dir nicht der Fall ist muß PHP neu kompilierert werden, siehe mein Beitrag oben. Du kannst das das configure Script mit dem Parameter --help aufrufen, um alle möglichen Parameter angezeigt zu bekommen. Für Dich dürfte der Parameter --with-interbase=/opt/firebird interessant sein.

Gruß,
Marcel

MrSpock 29. Dez 2004 10:19

Re: [PHP/Firebird] Zugriff
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Marcel,

das hab ich schon befürchtet. Ich habe jetzt die Sourcen von php 4.3.10 (wäre php 5 sinnvoller?). Dann habe ich mir mal angeschaut, wie XAMPP PHP configuriert hat und habe einen entsprechenden configure Befehl generiert, bei dem ich /opt/interbase durch /opt/firebird ersetzt habe.

Der Configure Befehl sieht dann so aus:

Zitat:

configure --prefix=/opt/lampp --with-apxs2=/opt/lampp/bin/apxs --with-config-file-path=/opt/lampp/etc --with-mysql=/opt/lampp --disable-debug --enable-bcmath --enable-calendar --enable-ctype --enable-dbase --enable-discard-path --enable-exif --enable-filepro --enable-force-cgi-redirect --enable-ftp --enable-gd-imgstrttf --enable-gd-native-ttf --with-ttf --enable-magic-quotes --enable-memory-limit --enable-safe-mode --enable-shmop --enable-sigchild --enable-sysvsem --enable-sysvshm --enable-track-vars --enable-trans-sid --enable-versioning --enable-wddx --enable-yp --with-ftp --with-gdbm=/opt/lampp --with-jpeg-dir=/opt/lampp --with-png-dir=/opt/lampp --with-tiff-dir=/opt/lampp --with-freetype-dir=/opt/lampp --without-xpm --with-zlib=yes --with-zlib-dir=/opt/lampp --with-openssl=/opt/lampp --with-expat-dir=/opt/lampp --enable-xslt --with-xslt-sablot=/opt/lampp -with-ming=/opt/lampp --with-dom=/opt/lampp --with-ldap=/opt/lampp --with-ncurses=/opt/lampp --with-gd --with-imap-dir=/opt/lampp --with-imap-ssl --with-imap=/opt/lampp --with-gettext=/opt/lampp --with-mssql=/opt/lampp --with-interbase=/opt/firebird --with-mysql-sock=/opt/lampp/var/mysql/mysql.sock --with-oci8=shared --with-mcrypt=/opt/lampp --with-mhash=/opt/lampp --enable-sockets --enable-mbstring=all --with-curl=/opt/lampp --enable-mbregex --enable-zend-multibyte --with-zip=/opt/lampp --enable-exif --with-bz2=/opt/lampp
Der Befehl kann leider noch nicht ausgeführt werden, weil bison nicht installiert ist und ich meine CDs nicht mitgenommen habe. :wall:

Marcel Gascoyne 29. Dez 2004 10:36

Re: [PHP/Firebird] Zugriff
 
Laut Deinem Screenshot ist PHP mit Interbase Support compiliert worden. Wahrscheinlich fehlt nur der Zugriff auf die Shared Library.

Schau mal nach, ob Du unter /usr/lib den Link libgds.so auf /opt/firebird/lib/libfbclient.so hast. Falls nicht leg mal einen an und starte den Webserver dann einmal neu.

Es schadet auch nicht /opt/firebird/bin in den Suchpfad aufzunehmen, z.b. über /etc/profile.

Gruß,
Marcel

MrSpock 29. Dez 2004 10:58

Re: [PHP/Firebird] Zugriff
 
Hallo Marcel,

der Link libgds.so existiert, aber er zeigt auf /opt/firebird/lib/libfbembed.so.

Den Pfad habe ich mal hinzugefügt.

[zusatz]
Habe den Link einmal umgebogen. Hat aber auch nicht funktioniert.
Im ursprünglichen configure wurde interbase ja mit dem Pfad /opt/interbase konfiguriert. Ich benötige aber /opt/firebird. Wo muss ich diesen Pfad denn manuell umstellen?
[/zusatz]

Marcel Gascoyne 29. Dez 2004 11:19

Re: [PHP/Firebird] Zugriff
 
Änder mal den Link, so verwendest Du ja nur den Embedded Server und kannst nur auf lokale Dateien zugreifen. Damit dürfte folgender Code aus Deinem PHP Skript auch nicht funktionieren:

Code:
$host = 'localhost:/opt/firebird/examples/employee.fdb';
Gruß,
Marcel

MrSpock 29. Dez 2004 11:25

Re: [PHP/Firebird] Zugriff
 
Hallo Marcel,

ich hatte es gerade noch oben eingefügt, aber es hat sich mit deinem Posting überschnitten.

Habe den Link einmal umgebogen. Hat aber auch nicht funktioniert.
Im ursprünglichen configure wurde interbase ja mit dem Pfad /opt/interbase konfiguriert. Ich benötige aber /opt/firebird. Wo muss ich diesen Pfad denn manuell umstellen?

Marcel Gascoyne 29. Dez 2004 11:42

Re: [PHP/Firebird] Zugriff
 
Zitat:

Zitat von MrSpock
Hallo Marcel,
Habe den Link einmal umgebogen. Hat aber auch nicht funktioniert.
Im ursprünglichen configure wurde interbase ja mit dem Pfad /opt/interbase konfiguriert. Ich benötige aber /opt/firebird. Wo muss ich diesen Pfad denn manuell umstellen?

Die Angabe bezieht sich nur darauf wo das Build-Script von PHP beim Compilieren die Headerdateien von Firebird findet. Zur Laufzeit ist das uninteressant.

So sehen bei mir die Links aus:

Code:
In /usr/lib:
lrwxrwxrwx 1 root root 37 Dec 22 09:57 /usr/lib/libfbclient.so -> ../../opt/firebird/lib/libfbclient.so*
lrwxrwxrwx 1 root root 39 Dec 22 09:57 /usr/lib/libfbclient.so.1 -> ../../opt/firebird/lib/libfbclient.so.1*
lrwxrwxrwx 1 root root 43 Dec 22 09:57 /usr/lib/libfbclient.so.1.5.1 -> ../../opt/firebird/lib/libfbclient.so.1.5.1*
lrwxrwxrwx 1 root root 32 Dec 22 09:57 /usr/lib/libgds.so -> /opt/firebird/lib/libfbclient.so*
lrwxrwxrwx 1 root root 32 Dec 22 09:57 /usr/lib/libgds.so.0 -> /opt/firebird/lib/libfbclient.so*

In /opt/firebird/lib:
lrwxrwxrwx  1 root    root        16 Dec 22 09:57 libfbclient.so -> libfbclient.so.1*
lrwxrwxrwx  1 root    root        20 Dec 22 09:57 libfbclient.so.1 -> libfbclient.so.1.5.1*
-r-xr-xr-x  1 firebird firebird 505592 Jul 14 18:33 libfbclient.so.1.5.1*
-r-xr-xr-x  1 firebird firebird  3300 Jul 14 18:33 libib_util.so*
Ähm, der Firebird Server läuft auch ;-)

Gruß,
Marcel

MrSpock 29. Dez 2004 18:27

Re: [PHP/Firebird] Zugriff
 
Hallo Marcel,

Zitat:

Ähm, der Firebird Server läuft auch
Ja. Ich kann über isql und über Kylix mit FibPlus Komponenten auf dieselbe Tabelle zugreifen. Nur PHP weigert sich standhaft.

Ich habe jetzt auch noch:

/usr/lib/libgds.so.0 -> /opt/firebird/lib/libfbclient.so

gesetzt. Der Link hat auch noch auf die embedded Lib gezeigt.Alle anderen Links verweisen auf dieselben Verzeichnisse wie bei dir.

Leider funktioniert das alles nicht. Ich habe aber wie gesagt keine interbase.so oder php_interbase.so auf meinem Rechner. Muss ich denn tatsächlich in der php.ini die extension für interbase aktivieren? Ich habe einmal alle libs durchsucht und in der Bibliothek libphp4.so kommt zumindest der String "interbase" vor. Das könnte ja heißen, dass interbase dort integriert ist und deshalb die Extension nicht aktiviert werden muss!?

Hast du noch eine Idee, was ich mal testen könnte?

Marcel Gascoyne 29. Dez 2004 18:56

Re: [PHP/Firebird] Zugriff
 
Zitat:

Zitat von MrSpock
Leider funktioniert das alles nicht. Ich habe aber wie gesagt keine interbase.so oder php_interbase.so auf meinem Rechner. Muss ich denn tatsächlich in der php.ini die extension für interbase aktivieren? Ich habe einmal alle libs durchsucht und in der Bibliothek libphp4.so kommt zumindest der String "interbase" vor. Das könnte ja heißen, dass interbase dort integriert ist und deshalb die Extension nicht aktiviert werden muss!?

Sieht mir auch danach aus das die Module statisch gelinkt sind. Hmm, versucht mal so einen Connect zu machen:

Code:
<?php
$conn = ibase_connect('127.0.0.1:/opt/firebird/examples/employee.fdb','SYSDBA','masterkey','ISO8859_1',0,3);
$result = ibase_query($conn,'select * from country');
while($row = ibase_fetch_object($result)) {
  echo $row->COUNTRY."\n";
}
ibase_close($conn);
?>
Und schreib dann nochmal welche Fehlermeldung Du jetzt bekommst.

Gruß,
Marcel

MrSpock 29. Dez 2004 19:04

Re: [PHP/Firebird] Zugriff
 
Hallo Marcel,

die Fehlermeldung ist auch so dieselbe:

Zitat:

Warning: ibase_connect(): Connection lost to pipe server operating system directive stat failed No such file or directory in /opt/lampp/htdocs/fbtest.php on line 7

Warning: ibase_query(): no InterBase link resource supplied in /opt/lampp/htdocs/fbtest.php on line 8

Warning: ibase_fetch_object(): supplied argument is not a valid InterBase result resource in /opt/lampp/htdocs/fbtest.php on line 9

Warning: ibase_close(): 0 is not a valid InterBase link resource in /opt/lampp/htdocs/fbtest.php on line 12

Marcel Gascoyne 29. Dez 2004 19:25

Re: [PHP/Firebird] Zugriff
 
Sooo, ich hab nun scheinbar die Lösung für Dein Problem gefunden. Dein PHP Modul wurde mit einem Firebird oder Interbase Classic Server compiliert. Dieser verwendet andere Shared Libraries als der Superserver. Wenn Du nun einen Firebird Superserver verwendest passt das nicht mehr zusammen, weil dort andere Shared Libraries verwendet werden. Daher auch die Fehlermeldung "No such file or directory".

Du musst scheinbar doch PHP neu compilieren.

Gruß,
Marcel

MrSpock 29. Dez 2004 19:42

Re: [PHP/Firebird] Zugriff
 
Hallo Marcel,

danke erst einmal. Werde das am Wochenende versuchen und mich dann noch einmal melden.

fiasko 29. Dez 2004 23:17

Re: [PHP/Firebird] Zugriff
 
Hallo,

zu Bibliotheken: mit ldd <binary> bekommst du angezeigt welche Bibliotheken ein Programm oder eine Bibliothek verwenden will und welche realen Dateien verwendet werden:

Zitat:

thomas@server:~$ ldd /usr/lib/php4/20010901/interbase.so
libgds.so => /usr/lib/libgds.so (0x28928000)
libc.so.6 => /lib/libc.so.6 (0x28a9e000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x0f933000)
wenn die libgds an einem ungewöhnlichen Ort liegt gehört entweder ein SymLink nach /usr/lib/local oder der Pfad nach /etc/ld.so.conf. Danach ein ldconfig aufgerufen und es sollte gehen.

MrSpock 2. Jan 2005 19:28

Re: [PHP/Firebird] Zugriff
 
Ich habe jetzt den Apache Server neu installiert und PHP ebenfalls. Hat soweit alles funktioniert. Jetzt wird aber bei Eingabe von localhost noch immer "XAMPP gestartet".

Es sieht so aus, als ob XAMPP den Apache 2 Server installiert hat. Dieser wird in /etc/init.d gestartet. Ich denke ich muss das Starten verhindert und stattdessen irgendwie automatisch den neu installierten Apache 1.3.3 Server starten, oder?

Wie muss ich das machen?

MrSpock 3. Jan 2005 21:53

Yippiiih, es funktioniert
 
Hallo Marcel,

da es nicht funktioniert hat und ich auch auf XAMPP nicht verzichten wollte, habe ich jetzt die neueste XAMPP Version mit PHP 5.0.3 und dem Apache Server 2 runtergeladen, einschließlich der Sourcen. Mit Hilfe des XAMPP Forums habe ich es jetzt geschafft! Super, ich kann jetzt auf Firebird 1.5 unter Linux mit XAMPP und PHP 5 zugreifen.

Danke an alle, die mir geholfen haben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 Uhr.

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