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 4  1 23     Letzte »    
lucy

Registriert seit: 25. Okt 2017
67 Beiträge
 
Delphi XE7 Starter
 
#1

WebServer

  Alt 26. Okt 2022, 15:27
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).

Wer kann mir helfen?

Was für ein "ContentType:='text/html'" brauche ich für PHP ?

Hier ein Stück Quelltext:

Code:
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;
Quelltext komplett
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.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#2

AW: WebServer

  Alt 26. Okt 2022, 15:52
Hallo haben einen kleinen Webserver, der soweit ganz gut läuft (HTML).

Jetzt würde ich gerne auch (PHP Scripte einbinden).
In der Tat

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?
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#3

AW: WebServer

  Alt 26. Okt 2022, 16:32
Hallo haben einen kleinen Webserver, der soweit ganz gut läuft (HTML).
In diesem Artikel findest du weitere Anregungen. Der integrierte HTML-Server beinhaltet einige Funktionen, die Phoenix aufgeworfen hat. Willst du danach dein Projekt weiterführen, schaue dir den mORMotBP an. Im GitHub Repro findest du ausreichend Sourcecode zum Studieren.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: WebServer

  Alt 26. Okt 2022, 17:03
Nja, CSS, JavaScript und Bilder kann man auch direkt in eine HTML ibntegrieren und somit auch als eine Datei rausgeben.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
lucy

Registriert seit: 25. Okt 2017
67 Beiträge
 
Delphi XE7 Starter
 
#5

AW: WebServer

  Alt 26. Okt 2022, 17:18
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!
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#6

AW: WebServer

  Alt 26. Okt 2022, 17:20
Installier Dir nen XAMPP und mach das alles. Delphi brauchst du dafür eher weniger.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
lucy

Registriert seit: 25. Okt 2017
67 Beiträge
 
Delphi XE7 Starter
 
#7

AW: WebServer

  Alt 26. Okt 2022, 17:21
Hallo haben einen kleinen Webserver, der soweit ganz gut läuft (HTML).
In diesem Artikel findest du weitere Anregungen. Der integrierte HTML-Server beinhaltet einige Funktionen, die Phoenix aufgeworfen hat. Willst du danach dein Projekt weiterführen, schaue dir den mORMotBP an. Im GitHub Repro findest du ausreichend Sourcecode zum Studieren.

Bis bald...
Thomas

Vielen Dank für Deinen Hinweis! Werde ich mir gleich mal anschauen.
  Mit Zitat antworten Zitat
lucy

Registriert seit: 25. Okt 2017
67 Beiträge
 
Delphi XE7 Starter
 
#8

AW: WebServer

  Alt 26. Okt 2022, 17:25
Installier Dir nen XAMPP und mach das alles. Delphi brauchst du dafür eher weniger.

Sherlock

ich weiß, und Xampp kenne ich auch
habe aber einfach Lust was mit Delphi zu machen.

Trozdem vielen Dank für Deine Hilfe
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: WebServer

  Alt 26. Okt 2022, 17:31
IntraWeb
Delphi4PHP ähh RadPHP ähh HTML5 Builder
TMS WEB Core
uniGUI
RADoween
Thriller
uvm.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#10

AW: WebServer

  Alt 26. Okt 2022, 18:15
Installier Dir nen XAMPP und mach das alles. Delphi brauchst du dafür eher weniger.
Ok, ich weiss: Eigentlich sollte man doch bitteschön was "Docker"-mäßiges Verwenden, das ist ja sooo cool.

Ich bin aber seit geraumer Zeit auf eine Art Zwischenwelt gestoßen, nämlich "Laragon".

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.

Geändert von Rollo62 (27. Okt 2022 um 07:53 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 17:45 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