CGI-Programm mit Lazarus

Rund um die LCL und andere Komponenten
MitjaStachowiak
Lazarusforum e. V.
Beiträge: 395
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

CGI-Programm mit Lazarus

Beitrag von MitjaStachowiak »

Hallo,
Ich möchte/muss :roll: ein CGI-Programm schreiben, also etwas für einen Webserver. Es wäre praktisch, wenn das mit Lazarus ginge - deswegen habe ich dieses Tutorial (http://wiki.lazarus.freepascal.org/CGI_Web_Programming" onclick="window.open(this.href);return false;) gelesen und das Beispielprogramm von da compiliert und testweise als test.cgi auf meinem Server hochgeladen: http://www.mitjastachowiak.de/cgi/test/test.cgi" onclick="window.open(this.href);return false;.
Der Server ist im Moment so eingestellt, dass in jedem Ordner das ausführen von CGI-Programmen zugelassen wird. Jedoch kommt beim aufrufen nur ein Fehler:

Code: Alles auswählen

Internal Server Error
 
The server encountered an internal error or misconfiguration and was unable to complete your request.
 
Please contact the server administrator, [no address given] and inform them of the time the error occurred, and anything you might have done that may have caused the error.
 
More information about this error may be available in the server error log.
_______________________________________________
 
Apache Server at http://www.mitjastachowiak.de" onclick="window.open(this.href);return false; Port 80
Im selben Ordner habe ich auch dieses PERL-Script, was einwandfrei funktioniert: http://de.selfhtml.org/perl/sprache/zah ... #beispiel1" onclick="window.open(this.href);return false;
http://www.mitjastachowiak.de/cgi/test/zahlen1.pl" onclick="window.open(this.href);return false;

Ich habe schon versucht die Berechtigungen für die CGI-Datei zu ändern, half aber nicht.

Wer hat schon CGI-Programme mit Lazarus geschrieben und kann helfen?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: CGI-Programm mit Lazarus

Beitrag von Christian »

Was steht im error log dazu ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 395
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: CGI-Programm mit Lazarus

Beitrag von MitjaStachowiak »

Äm.. Wo kann ich das Abrufen?

Ich habe nur ein access_log gefunden, aber da steht nur drinnen, welche Dateien aufgerufen wurden. Die Adresse des CGI-Programms taucht da auch auf, aber keine Besonderheiten an dieser Stelle.

Es sieht so aus, als könne ich die error_log bei Alfahosting gar nicht anzeigen (http://forum.ruby-portal.de/viewtopic.php?t=11686" onclick="window.open(this.href);return false;) :(
Aber vielleicht kann mir mal jemand ein compiliertes HelloWorld-Programm geben, das definitiv funktioniert, dann kann ich ja ausprobieren, ob es am Server liegt...

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2826
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: CGI-Programm mit Lazarus

Beitrag von m.fuchs »

MitjaStachowiak hat geschrieben:[...] error_log bei Alfahosting [...]
Ah ok, du versuchst einen Shared-Hoster zu nutzen. Erlaubt dieser denn CGIs, die keine Skripte sind? Hast du dein Programm auch für das gleiche Betriebssystem kompiliert, wie auf dem Server läuft?
Lad dir doch mal einen Apache herunter (zum Beispiel: http://www.apachefriends.org/de/xampp.html) und teste dein CGI lokal.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 395
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: CGI-Programm mit Lazarus

Beitrag von MitjaStachowiak »

Ja, es liegt am Server. Ich habe Apache inzwischen lokal starten können und da geht dann das Programm.

Ich habe mal bei Alfahosting angefragt: Man kann zwar Binärdateien ausführen, aber die dürfen irgendwie die Konsole nicht verwenden. Ich bin gespannt, ob ich auf meiner Homepage nochmal was zum laufen bringe... Wenn nicht ist's auch nicht so schlimm, das Programm ist schließlich für einen anderen Server, der wohl spürbar umfangreicher ist. Ich werde mal die Zugangsdaten einholen und testen ob es da geht; dann kann ich das einfach lokal mit Apache entwickeln.

Es geht dann darum, eine CGI-Anwendung dauerhaft auszuführen und vom Client Daten an diese zu senden und umgekehrt. Das soll ja recht kompliziert sein...

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2826
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: CGI-Programm mit Lazarus

Beitrag von m.fuchs »

MitjaStachowiak hat geschrieben:Ich habe mal bei Alfahosting angefragt: Man kann zwar Binärdateien ausführen, aber die dürfen irgendwie die Konsole nicht verwenden.
Das verstehe ich nicht ganz. Wie verwendest du die Konsole von deinem CGI aus?
MitjaStachowiak hat geschrieben:Es geht dann darum, eine CGI-Anwendung dauerhaft auszuführen [...]
Ähm, sind diese beiden Anforderungen nicht irgendwie gegensätzlich? Der Witz von CGI ist ja grad, dass bei einem entsprechenden Request ein neuer Prozess gestartet wird. Da ist nichts mit Dauerbetrieb.
MitjaStachowiak hat geschrieben:[...]und vom Client Daten an diese zu senden und umgekehrt. Das soll ja recht kompliziert sein...
Für einen Datenaustausch benötigst du keinen dauerhaften Prozess deines CGI-Skriptes. Dies übernimmt ja schon der Webserver. Und der kümmert sich dann auch darum, die Daten an dein CGI-Programm weiterzugeben.

Michael
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 395
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: CGI-Programm mit Lazarus

Beitrag von MitjaStachowiak »

Das verstehe ich nicht ganz. Wie verwendest du die Konsole von deinem CGI aus?
Ups, nicht die Konsole: Man soll die Kommandozeile nicht verwenden und es muss HTML sein. Ich habe also folgenden Code versucht:

Code: Alles auswählen

program html;
 
{$mode objfpc}{$H+}
 
begin
  writeln('Content-Type:text/html',#10#13);
 
  writeln('<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\">');
  writeln('<HTML>');
  writeln(' <HEAD>');
  writeln('  <TITLE>Hello World</TITLE>');
  writeln(' </HEAD>');
  writeln(' <BODY>');
  writeln('  <P>Hallo, dies ist ein Test fuer CGI</P>');
  writeln(' </BODY>');
  writeln('</HTML>');
 
end.
Ging aber auch nicht :(

Das Ziel des Ganzen ist es, diese Messdatenplattform (http://www.hems-renewables.de/pv-anlage ... daten.html" onclick="window.open(this.href);return false;) nachzubessern. Im Moment wird dort Tunnelier verwendet um auf die Datenbank zuzugreifen. Aber in Zukunft muss/sollte auf dem Client eine Neustartfunktion eingebaut werden. Also entweder, ich schreibe ein Programm, das sich um das Starten und Beenden von Tunnelier kümmert, oder ich schreibe ein Programm, das das Datenupload selbst in die Hand nimmt.

Zu letzterem war meine erste Idee, ein Programm auf dem Server zu installieren, das die Datenbank pflegt. Aber wenn ich da nur Programme habe, die einmal kurz durchlaufen, wird es schwierig, zu verhindern, dass da jeder X-Beliebige etwas hochlädt. Ich habe irgendwo gelesen, dass man mit CGI inzwischen auch dauerhaft laufende Prozesse einrichten kann...
Was ist eure Meinung? Wie würdet Ihr das lösen?

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2826
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: CGI-Programm mit Lazarus

Beitrag von m.fuchs »

MitjaStachowiak hat geschrieben: Ups, nicht die Konsole: Man soll die Kommandozeile nicht verwenden und es muss HTML sein. Ich habe also folgenden Code versucht:
[...]
Ging aber auch nicht :(
Seltsam, was sollte an diesem simplen Script nicht gehen? Zumindest in meiner Testumgebung hier läuft das.

Weil du vorher nicht darauf geantwortet hast: Kompilierst du dein CGI-Programm für das richtige System?

Micha
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 395
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: CGI-Programm mit Lazarus

Beitrag von MitjaStachowiak »

Kompilierst du dein CGI-Programm für das richtige System
Das war auch meine Vermutung... Deswegen habe ich ja beim Support gefragt, aber genauere Infos, für welches System ich das machen muss, gab es nicht.
Aber ich kann's ja jetzt auch lokal testen. Ich muss halt mal Abwarten, ob es auf dem richtigen Server dann geht.
Zuletzt geändert von MitjaStachowiak am Fr 15. Jul 2011, 17:27, insgesamt 1-mal geändert.

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: CGI-Programm mit Lazarus

Beitrag von mschnell »

MitjaStachowiak hat geschrieben:Es geht dann darum, eine CGI-Anwendung dauerhaft auszuführen
Das geht mit "reinem" CGI nicht. der Web-Server bekommt erst bei Programm-Ende den Output des cgi-Programms.

Es geht mit "fastCGI". fastCGI-Programme können an den Web-Server Daten (über Pipes und TCP/IP) zurückliefern ohne sich zu beenden. Beim ersten Aufruf wird das Programm gestartet, bei weiteren bekommt es nur noch Daten.

In Lazarus kannst Du ein FastCGI-Template unter "Neu" finden. Das sind aber trotzdem "Programme" und keine "Anwendungen", haben also keine Main-Loop. TTimer und solche netten Sachen kannst Du nicht benutzen. Das Dein Code wird nur aufgerufen,. wenn das Programm Daten vom Server bekommt.

Apache kann fast-CGI-Programme starten und mit ihnen kommunizieren. Ob Dein Hoster das zulässt, ist eine andere Frage.

Es ist auch nicht garantiert, wie lange das Programm läuft. Irgendwann wird es automatisch gekillt. Spätestens bei der Systemwartung.

-Michael

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 395
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: CGI-Programm mit Lazarus

Beitrag von MitjaStachowiak »

Das klingt gut. Mal sehen, ob ich damit weiter komme.
Es ist auch nicht garantiert, wie lange das Programm läuft. Irgendwann wird es automatisch gekillt. Spätestens bei der Systemwartung.
Nach meinen Informationen werden die Programme da nur 1x täglich beendet. Damit sollte ich klar kommen...

Erstmal Danke für den Tipp :D

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: CGI-Programm mit Lazarus

Beitrag von mschnell »

Halt uns auf dem Laufenden, wie das klappt...

-Michael

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: CGI-Programm mit Lazarus

Beitrag von Christian »

Also bei mir klappts super :-)
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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: CGI-Programm mit Lazarus

Beitrag von mschnell »

Christian hat geschrieben:Also bei mir klappts super :-)
Was denn ?

Ein Fast GCI Programm mit Lazarus "out of the box" erstellt, das über den Webserver mit dem Browser kommuniziert und nachweislich einen Tag am leben bleibt ?

-Michael

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 395
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: CGI-Programm mit Lazarus

Beitrag von MitjaStachowiak »

Ich habe erstmal das hier runtergeladen: http://code.google.com/p/extpascal/" onclick="window.open(this.href);return false;.
Habe dann die Unit FCGIApp eingebunden. Ich musste dann in verschiedenen Units ein {$mode delphi}{$H+} einfügen und einmal einige Variablen umbenennen, dann ging's.
Bin mal gespannt, ob ich jetzt ein dauerhaft laufendes Programm hinbekomme :?:

Antworten