MySQL über Webserver

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Benutzeravatar
theo
Beiträge: 10865
Registriert: Mo 11. Sep 2006, 19:01

Re: MySQL über Webserver

Beitrag von theo »

Hitman hat geschrieben: Mit FastCGI schon ... die Prozesse bleiben nämlich laufen.
Kann sein, damit kenne ich mich nicht aus. Aber die anderen Bedenken bleiben. Ich versuch's mal mit PHP.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: MySQL über Webserver

Beitrag von mschnell »

theo hat geschrieben:Darum geht's. Ausserdem sehe ich den Vorteil von CGI nicht. Das ist auch nur ein Prozess der nach Abarbeitung des Requests verschwindet. Die Datenbankverbindung lässt sich so auch nicht halten.
Wenn ich mich nicht täusche ist CGI die einzige Möglichkeit Informationen, die nicht direkt Datei-Inhalte sind über den http-Port eines Webservers (also auch durch den Webserver selber) zu tunneln. Bei "standard"-CGI ist das Programm beendet, bevor Daten an den Client geschickt werden. Das gilt vermutlich auch, wenn das CGI-Programm in PHP geschrieben ist. Wenn das Programm nicht beendet werdebn soll (also auch die Datenbank-Verbindung offen bleiben könnte) muss man in Linux "fast-CGI" (eine von Apache unterstützte Methode der Programm-Kommunikation über Pipes oder TCP/IP) oder in Windows ISAPI (eine vom IIS unterstützte Methode der Kommunikation mit einer DLL) verwenden.

Es ist denkbar, dass der PHP-Interpreter mit fast-CGI von Apache aufgerufen wird und somit (eine Zeit lang) laufen bleibt, wenn ein CGI-Request fertig bearbeitet ist. Keine Ahnung, wie sich das dann in einem PHP-Script verwenden lässt (z.B.Übergabe der offenen Datenbank-Verbindung von einem Request (=Start eines Scripts) zum nächsten.

-Michael

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: MySQL über Webserver

Beitrag von mschnell »

theo hat geschrieben:Ich versuch's mal mit PHP.
Dann hoffen wir mal dass der PHP-Interpreter die dreckigen Details von CGI vor Dir verstecken kann :).

-Michael
Zuletzt geändert von mschnell am Mo 16. Aug 2010, 15:24, insgesamt 2-mal geändert.

Benutzeravatar
theo
Beiträge: 10865
Registriert: Mo 11. Sep 2006, 19:01

Re: MySQL über Webserver

Beitrag von theo »

mschnell hat geschrieben:Keine Ahnung, wie sich das dann in einem PHP-Script verwenden lässt (z.B.Übergabe der offenen Datenbank-Verbindung von einem Request (=Start eines Scripts) zum nächsten.
Ich hatte mir das angeschaut. Keine Chance.
Man kann die sog. PHP "resources" nicht in Session-Variablen speichern.
Das sind wahrsch. Pointer, die beim nächsten Aufruf ins Nirvana zeigen würden.

Code: Alles auswählen

resource mysql_query  ( string $Anfrage  [, resource $Verbindungs-Kennung   ] )

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: MySQL über Webserver

Beitrag von mschnell »

Dann macht PHP wohl doch "normales" CGI und nicht "fast-CGI" :(.
-Michael

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: MySQL über Webserver

Beitrag von Hitman »

mschnell hat geschrieben:Dann macht PHP wohl doch "normales" CGI und nicht "fast-CGI" :(.
Kann man so absolut nicht verallgemeinern. PHP bietet viele Schnittstellen - die Frage ist, was der jeweilige Server Administrator draus macht. Aber man kann sich quasi wieder nicht darauf verlassen, dass es überall genau gleich funktioniert.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: MySQL über Webserver

Beitrag von mschnell »

Hitman hat geschrieben:PHP bietet viele Schnittstellen
Wie meist Du das ?
(a) "das PHP Interpreter Executable kann über viele Schnittstellen mit einem Webserver kommunizieren" oder
(b) "die PHP-Sprache erlaubt es, viele Schnittstellen (zu was auch immer) zu programmieren" ?

zu (b): Wenn ich das richtig sehe sendet ein Programm in PHP-Sprache eine Information Richtung Client (also an den Webserver) mit "echo". Die verwendete Schnittstelle definiert - wie Du sagst - der Administrator des Webservers.

-Michael
Zuletzt geändert von mschnell am Mi 18. Aug 2010, 10:16, insgesamt 1-mal geändert.

Socke
Lazarusforum e. V.
Beiträge: 3177
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: MySQL über Webserver

Beitrag von Socke »

Es gibt drei Möglichkeiten, PHP auf einem Webserver einzusetzen:
  • als Server-Modul (nur Apache, bessere Performance, aber sicherheitskritisch)
  • als CGI (der PHP-Interpreter wird als CGI gestartet)
  • als Fast-CGI (als Erweiterung von CGI)
mschnell hat geschrieben:zu (b): Wenn ich das richtig sehe sendet ein Programm in PHP-Sprache eine Information Richtung Client (also an den Webserver) mit "echo". Die verwendete Schnittstelle definiert .- wie Du sagst - der Administrator des Webservers.
Allen gemeinsam ist, dass die Ausgabe (stdout) des Programms (PHP-Interpreter/-Modul/CGI) als Rückgabe des Webservers herhalten muss (als ob es eine Datei wäre). Wie die Anbindung von PHP an den Server geschieht ist Sache des Administrators und sollte die PHP-Scripte nicht wesentlich beeinflussen (unter normalen Umständen).
Daten direkt an den Client senden, kann nur der Webserver (dieser ist für die Verbindung zuständig -> ansonsten hat man einen eigenen Server).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: MySQL über Webserver

Beitrag von mse »

theo hat geschrieben: Ich hab mal gesucht und ein PHP Script gefunden, was SQL-Queries entgegenimmt und XML Daten zurückliefert.
Das funzt soweit, ist aber natürlich nicht das Gelbe vom Ei, weil man alles manuell machen muss.
Es gibt wohl keine TMySQLXMLWebConnection oder sowas, damit man die Data Controls oder TSQLQuery etc. verwenden könnte, stimmt's?
Das sollte mit einem tcustomsqlconnection Nachkommen machbar sein, ich beziehe mich hier auf die MSEgui Version:
- internalexecute() reicht den SQL-Text an das PHP-Script weiter.
- Der Server liefert XML zurück, die connection Komponente decodiert und speichert die Daten.
- fetch() und loadfield() liefern die Daten an tsqlquery.

Das in einem anderen thread aufgetauchte Problem der Server generierten IDs bei INSERT löst MSEgui bei MySQL durch Zurückschreiben der LastInsertID in das primary key field.
Neu gibt es auch ein pf1_refresh flag in der tmse*field providerflag1 property welche RETURNING bei INSERT und UPDATE verwendet um auf die Server generierten Werte zu synchronisieren.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: MySQL über Webserver

Beitrag von mschnell »

Socke hat geschrieben:Es gibt drei Möglichkeiten, PHP auf einem Webserver einzusetzen:
  • als Server-Modul (nur Apache, bessere Performance, aber sicherheitskritisch)
  • als CGI (der PHP-Interpreter wird als CGI gestartet)
  • als Fast-CGI (als Erweiterung von CGI)
Das ist alles Linux. In Windows mit ISS - da gibts kein fast-CGI - sollte doch auch ISAPI möglich sein (das ist so was ähnliches wie Apache Server-Modul) ....
Socke hat geschrieben:Allen gemeinsam ist, dass die Ausgabe (stdout) des Programms (PHP-Interpreter/-Modul/CGI) als Rückgabe des Webservers herhalten muss
Nö. Fast-CGI verwendet eine Pipe oder TCP/IP zwischen dem Webserver und dem CGI-Programm in beiden Richtungen. Was ISAPI verwendet, weiß ich nicht, jedenfalls nicht STDOUT. Normales CGI in Windows verwendet aber auch STDOUT.

-Michael

Antworten