![]() |
WebServer
Delphi Version XE 7 Starter
Hallo haben einen kleinen Webserver, der soweit ganz gut läuft (HTML). Jetzt würde ich gerne auch (PHP Scripte einbinden). :shock: Wer kann mir helfen? Was für ein "ContentType:='text/html'" brauche ich für PHP ? Hier ein Stück Quelltext:
Code:
Quelltext komplett
procedure TForm1.ServerCommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); var Stream: TFileStream; Groesse: String; begin if (CheckBox1.Checked=True) and ((ARequestinfo.AuthUsername<>Edit2.Text) or (ARequestinfo.AuthPassword<>Edit3.Text)) then begin AResponseinfo.ContentText:='Benutzername und Passwort...'; AResponseinfo.AuthRealm:='TEST-Interface'; end else begin if ARequestinfo.Document='/' then begin AResponseinfo.ContentType:='text/html'; Stream:=TFileStream.Create('htdocs/index.html', fmOpenRead or fmShareDenyWrite); 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 index.html (' + inttostr(round(Stream.Size /1024)) + 'kb) angefordert.'); end; end; end;
Code:
unit Unit1;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, Vcl.XPMan, IdBaseComponent, IdComponent, IdCustomTCPServer, IdCustomHTTPServer, IdHTTPServer, IdContext; type TForm1 = class(TForm) TrayIcon1: TTrayIcon; Label1: TLabel; Edit1: TEdit; GroupBox1: TGroupBox; Memo1: TMemo; CheckBox1: TCheckBox; Button1: TButton; Button2: TButton; Button3: TButton; Edit2: TEdit; Edit3: TEdit; Label2: TLabel; Label3: TLabel; Server: TIdHTTPServer; Button4: TButton; procedure Button3Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure ServerConnect(AContext: TIdContext); procedure ServerDisconnect(AContext: TIdContext); procedure ServerCommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); procedure TrayIcon1DblClick(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; user: Integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Server.DefaultPort:=Strtoint(Edit1.Text); Server.Active:=True; Memo1.Lines.Add('Status: ' + datetostr(date) + ' | ' + timetostr(time) + ': Server gestartet'); Button1.Enabled:=False; Button2.Enabled:=True; Label1.Enabled:=False; Edit1.Enabled:=False; end; procedure TForm1.Button2Click(Sender: TObject); begin Server.Active:=False; Memo1.Lines.Add('Status: ' + datetostr(date) + ' | ' + timetostr(time) + ': Server gestoppt'); Button1.Enabled:=True; Button2.Enabled:=False; Label1.Enabled:=True; Edit1.Enabled:=True; end; procedure TForm1.Button3Click(Sender: TObject); begin Memo1.Lines.Clear; Memo1.Lines.Add('Server 1.0'); end; procedure TForm1.Button4Click(Sender: TObject); begin Hide(); WindowState := wsMinimized; TrayIcon1.Visible := True; TrayIcon1.Animate := True; TrayIcon1.ShowBalloonHint; end; procedure TForm1.ServerCommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); var Stream: TFileStream; Groesse: String; begin if (CheckBox1.Checked=True) and ((ARequestinfo.AuthUsername<>Edit2.Text) or (ARequestinfo.AuthPassword<>Edit3.Text)) then begin AResponseinfo.ContentText:='Benutzername und Passwort...'; AResponseinfo.AuthRealm:='TEST-Interface'; end else begin if ARequestinfo.Document='/' then begin AResponseinfo.ContentType:='text/html'; Stream:=TFileStream.Create('htdocs/index.html', fmOpenRead or fmShareDenyWrite); 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 index.html (' + inttostr(round(Stream.Size /1024)) + 'kb) angefordert.'); end; end; end; procedure TForm1.ServerConnect(AContext: TIdContext); begin User:=User +1; GroupBox1.Caption:='Log (User: ' + inttostr (user) + '):'; end; procedure TForm1.ServerDisconnect(AContext: TIdContext); begin User:=User -1; GroupBox1.Caption:='Log (User: ' + inttostr (user) + '):'; end; procedure TForm1.TrayIcon1DblClick(Sender: TObject); begin TrayIcon1.Visible := False; Show(); WindowState := wsNormal; Application.BringToFront(); end; end. |
AW: WebServer
Zitat:
Also, der "Webserver" kann tatsächlich nur HTML ausliefern. Und zwar genau eine Datei, wenn '/' angefragt wird. Bevor es dann mit PHP losgeht, sollte er vielleicht erstmal von einer HTML-Datei angefragte weitere Ressourcen (.css-Dateien, Bilder, ggf. JavaScript-Dateien) ausliefern können. PHP-Scripte werden dann auch nicht einfach so von einem Webserver ausgeliefert, sondern sie werden ausgeführt. Das heisst der Webserver muss einen PHP-Interpreter aufrufen, ihm sagen welche PHP-Datei angefragt wurde, der Interpreter führt dann das Script aus und gibt das Ergebnis (meist auch HTML) zurück. Erst das wird dann vom Webserver an den Client (meist ein Browser) gesendet. Die Frage deutet für mich also schon ein wenig darauf hin, dass hier noch viel grundlegendes Wissen über "wie funktioniert das Web" fehlt - insbesondere wo (Browser, sonstiger Client, Server) wann (vor, während, nach einem Request) was (Javascript, Server-Side Scripte wie PHP, ASP, Perl etc.) ausgeführt wird (also z.B. der PHP-Interpreter auf dem Server, aufgerufen vom Webserver bzw. mittels CGI oder anderer Schnittstellen), und was (welche Inhalte) dann wie (Protokoll, Header etc.) "über die Leitung" geht. Der Schritt von einem "ich kann eine einzige Datei ausliefern" zu "ich kann komplette statische Webseiten inkl. aller notwendigen Ressourcen (wie CSS, JS, Bildern in verschiedenen Formaten, Webfonts, etc.pp.) ausliefern" ist schon recht groß, und wenn man dann dynamische Inhalte (PHP) generieren will, ist das ein noch viel größerer Schritt. Zumal ein Webserver üblicherweise auch ein Serverseitiger Service (Windows Service, Linux daemon etc.) ist, und in aller Regel keine Formulare oder gar Buttons hat. Deswegen erstmal die Frage: Was willst Du denn _eigentlich_ wirklich machen? |
AW: WebServer
Zitat:
![]() ![]() Bis bald... Thomas |
AW: WebServer
Nja, CSS, JavaScript und Bilder kann man auch direkt in eine HTML ibntegrieren und somit auch als eine Datei rausgeben.
|
AW: WebServer
Oh, dass hört sich aber sehr kompliziert an. Hatte mir das Projekt „Eigener WebServer“ etwas einfacher vorgestellt.
Wolle mich etwas mit Delphi beschäftigen, und etwas dazulernen. Wollte gerne Daten aus einer Datenbank (mySQL) über eine Webseite (HTML, PHP, CSS und etwas JavaScript) bearbeiten. Diese Komponeten interessieren mich halt. Das ganze wollte ich über einen eigenen WebServer Verwalten und local im Netzwerk laufen lassen. Den Zugriff wollte ich über einen FIDO2 USB-Stick regeln (ein User mit Passwort). Der Zugriff wäre somit an jedem Client-PC im Netzwerk "Webbrowser" möglich. würde mich über jede Unterstützung freuen! |
AW: WebServer
|
AW: WebServer
Zitat:
Vielen Dank für Deinen Hinweis! Werde ich mir gleich mal anschauen. :) |
AW: WebServer
Zitat:
ich weiß, und Xampp kenne ich auch :-) :lol: habe aber einfach Lust was mit Delphi zu machen. Trozdem vielen Dank für Deine Hilfe :) |
AW: WebServer
IntraWeb
Delphi4PHP ähh RadPHP ähh HTML5 Builder TMS WEB Core uniGUI RADoween Thriller uvm. |
AW: WebServer
Zitat:
Ich bin aber seit geraumer Zeit auf eine Art Zwischenwelt gestoßen, nämlich " ![]() Das liegt gefühlt genau zwischen XAMPP / WAMP und Docker und bietet neben PHP, MySql auch Tools wie Node.js, VsCode, Heidi, etc. Alles schön portabel und vor Allem völlig Windows-Kompatibel und Delphi-freundlich ( wenn man es richtig installiert ). Wie gesagt, mein Endziel ist vielleicht auch Docker, aber Laragon ist echt bequem, simpel, schnell und leicht zu warten ( mehrere PHP/Mysql nebeneinander). Damit fahre ich im Moment ganz bequem ein paar Web-Projekte ab. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:42 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