AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

WebServer

Ein Thema von lucy · begonnen am 26. Okt 2022 · letzter Beitrag vom 27. Okt 2022
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#1

AW: WebServer

  Alt 27. Okt 2022, 07:05
Grob gesagt: WebServer mit Delphi erstellen: Geht.
Man kann auch mit einem Hammer eine Schraube in die Wand bekommen. Die Frage ist nur, ob das das optimal geeignete Werkzeug für diese Aufgabe ist. Und wenn es schon Delphi sein muss, würde ich mich nicht selbst kasteien, sondern lieber auf entsprechende Frameworks zurückgreifen (dieses TMS-Dings, mORMot, DMVC, MARS Curiosity etc.).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hhcm

Registriert seit: 12. Feb 2006
Ort: Wegberg
310 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: WebServer

  Alt 27. Okt 2022, 07:33
Zitat:
dieses TMS-Dings


Mit dem TMS-Dings kann man aber auch keinen PHP Interpreter ersetzen. (oder doch?)
Chris
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#3

AW: WebServer

  Alt 27. Okt 2022, 08:22
Klar kann man überall intern auch PHP aufrufen.
PHP ist diesbezüglich nichts Anderes, wie Python, PowerShell, Batch, PascalScript ........


PHP4Delphi/RadPHP (k.A. wie weit auch HTML5 Builder) war reines PHP mit JavaScript, was man im PascalStyle mit vcl-ähnlichen Komponenten nutzen konnte.

Aber wer sagt denn das es PHP sein?
Wenn man unbedingt was mit Delphi machen will, dann schreibt man den Code in der delphi-language und lässt sich davon dann HTML erzeugen/ausgeben.

Ansonsten nimmt man was Anderes, was direkt PHP kann und eben kein Delphi ... OK, abgesehn von vielleicht einem Modul (Erweiterung) im PHP-Server oder sowas wie CGI im HTTP-Server.
Nur wenn man extrem pervers masochistisch veranlagt ist, dann schreibt man seinen eigenen PHP-Interpreter.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#4

AW: WebServer

  Alt 27. Okt 2022, 10:05
Grob gesagt: WebServer mit Delphi erstellen: Geht.
Man kann auch mit einem Hammer eine Schraube in die Wand bekommen. Die Frage ist nur, ob das das optimal geeignete Werkzeug für diese Aufgabe ist. Und wenn es schon Delphi sein muss, würde ich mich nicht selbst kasteien, sondern lieber auf entsprechende Frameworks zurückgreifen (dieses TMS-Dings, mORMot, DMVC, MARS Curiosity etc.).
Es geht doch garnicht darum ein optimales Werkzeug für was auch immer zu finden, sondern darum zu versuchen, ob es geht. Zumindest verstehe ich die Aufgabenstellung im Eingangsthread so.

Und nein, wenn man's mit reinem Delphi und den Indykomponenten macht, muss man sich nicht kasteien.
Delphi-Quellcode:
     
      sFilename := Format('%s%s',['htdocs',ARequestinfo.Document]);
      if FileExists(sFilename) then
      begin
        Stream:=TFileStream.Create(sFilename, fmOpenRead or fmShareDenyWrite);
      end
      else
      begin
        Stream:=TFileStream.Create('htdocs/index.html', fmOpenRead or fmShareDenyWrite);
      end;
      // Hier muss man noch den ContentType abhängig von dem Dateityp, setzen.
      AResponseinfo.ContentType:='text/html';
      AResponseinfo.ContentStream:=Stream;
      setlength(Groesse, Stream.Size);
      Stream.Read(Groesse[1], Stream.Size);
      Memo1.Lines.Add(datetostr(date) + ' | ' + timetostr(time) + ': Client ' + ARequestinfo.RemoteIP + ' hat die Datei ' + sFilename + ' (' + inttostr(round(Stream.Size /1024)) + 'kb) angefordert.');
Damit kann man dann auch CSS, Bilder, und was sonst noch so alles auf der Festplatte rumliegt, ausliefern.

CGI-Programme ruft man mit dem TIDCGIRunner im Prinzip in der Form auf:

CGIRunner.Execute(ARequestinfo.Document,AContext,RequestInfo,ResponseInfo,Action);

Ist also auch "nur" ein Einzeiler, geht auch mit .bat, .cmd, .pl für Perl, ..., ist ähnlich simpel wie ShellExecute.

Und ja: Als professionelle Lösung nicht geeignet, aber ist die hier gefordert?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#5

AW: WebServer

  Alt 27. Okt 2022, 10:50
Sorry, mir war nicht bekannt, dass man in diesem Forum nicht mehr auf alternative Lösungen verweisen darf.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#6

AW: WebServer

  Alt 27. Okt 2022, 11:02
Es ging mir nicht um alternative Lösungen sondern um
Zitat von DeddyH:
Man kann auch mit einem Hammer eine Schraube in die Wand bekommen.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#7

AW: WebServer

  Alt 27. Okt 2022, 11:15
Lies Dir doch Phoenix' Beitrag noch einmal durch und vergleiche den Aufwand. Darauf wollte ich mit meinem Hammer-Vergleich hinaus. Dass diese Delphi-Programmierer immer gleich Schnappatmung bekommen müssen...
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#8

AW: WebServer

  Alt 27. Okt 2022, 11:38
Der von Phoenix beschriebene Aufwand entspricht meiner Erfahrung nach nicht der Realität.

Man muss keine HTTP-Spezifikation durchimplementieren, ... (das ist in den INDY-Komponenten alles schon enthalten).
Zitat von Phoenix:
Das Beispiel mit dem vollständigen Webserver (inkl. CSS, JS, Bildern, Videos, Binärformaten etc.) ist in modernem .NET 7 vermutlich irgendwas zwischen 3 und 5 Zeilen.
In meinem obigen Beispiel sind's halt keine 3 bis 5 Zeilen, sondern 13.

Man könnte es auch noch verkürzen:
Delphi-Quellcode:
sFilename := Format('%s%s',['htdocs',ARequestinfo.Document]);
if not FileExists(sFilename) then sFilename := 'htdocs/index.html';
Stream := TFileStream.Create(sFilename, fmOpenRead or fmShareDenyWrite);
// Hier muss man noch den ContentType abhängig von dem Dateityp, setzen.
AResponseinfo.ContentType := 'text/html';
AResponseinfo.ContentStream := Stream;
Delphi-Quellcode:
procedure TForm1.ServerCommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
  Stream : TFileStream;
  Filename : String;
begin
  Filename := Format('%s%s',['htdocs',ARequestinfo.Document]);
  if not FileExists(sFilename) then Filename := 'htdocs/index.html';
  Stream := TFileStream.Create(sFilename, fmOpenRead or fmShareDenyWrite);
  // Hier muss man noch den ContentType abhängig vom Dateityp, setzen.
  AResponseinfo.ContentType := 'text/html';
  AResponseinfo.ContentStream := Stream;
  AResponseinfo.ContentLength := Stream.Size;
end;
Und damit haben wir dann auch in Delphi 'nen 14-Zeiler
Mehr ist für
Zitat von Phoenix:
Das Beispiel mit dem vollständigen Webserver (inkl. CSS, JS, Bildern, Videos, Binärformaten etc.)
nicht erforderlich.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#9

AW: WebServer

  Alt 27. Okt 2022, 12:30
Ja, ich gebe hier auch über einen TidHTTPServer eine Webseite raus,
genauer geht es um das HTML/CSS/JS/Image-Zeugs, was von Help&Manual generiert wurde.

Damit aber der Browser Bilder/JS/CSS ordentlich behandelt, mußte ich dann auch teilweise Dateien umkodieren (ANSI<>UTF-8), beim Rausgeben,
und zusätzlich auch an den HTTP-Headern rumspielen, also ContentType, Charset und Dergleichen alles selbst behandeln, entsprechend der angefragten DateiEndungen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#10

AW: WebServer

  Alt 27. Okt 2022, 12:49
Damit aber der Browser Bilder/JS/CSS ordentlich behandelt, mußte ich dann auch teilweise Dateien umkodieren (ANSI<>UTF-8), beim Rausgeben,
und zusätzlich auch an den HTTP-Headern rumspielen, also ContentType, Charset und Dergleichen alles selbst behandeln, entsprechend der angefragten DateiEndungen.
Das ist aber (streng genommen) keine Aufgabe des Webservers, bei spezifikationkonformen Aufbau der HTML-Dateien, sollte die Umcodierung entbehrlich sein.

Und neben AResponseinfo.ContentType sollte man natürlich alle weiteren Werte für AResponseinfo korrekt setzen.

Z. B.:
AResponseInfo.ContentEncoding
AResponseInfo.ContentLanguage
AResponseInfo.ContentLength

und die ausgegebenen HTML-Seiten sollten auch die entsprechenden Meta-Tags im Header enthalten.

Aber auch das ist eigentlich keine Aufgabe des Webservers, sondern der Routinen, Programme, Autoren, ..., die die HTML-Seiten erstellen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz