Entwickler-Ecke

Internet / Netzwerk - Delphiprogramm steuern duch PHP-Button


meik - Do 25.10.07 21:03
Titel: Delphiprogramm steuern duch PHP-Button
Hallo Leute,

Auf meinem Hauptrechner läuft ein Delphiprogramm und es ist der Apache-Server installiert.

Ich möchte jetzt eine html-Seite erstellen, auf der es 2 Buttons gibt. In meinem Delphiprogramm gibt es ebenfalls 2 Buttons.
Die html-seite wird über das Netzwerk aufgerufen.
Jetzt soll beim Klick auf Button1, auf der html-seite, die Procedure im Delphiprogramm ausgeführt werden, die für das OnClick-Ereigniss im von Button1(im Delphiprogramm) definiert ist.
Wie stell ich das am geschicktesten und einfachsten an!?
es geht lediglich darum, wie ich das anstelle, dass beim klick des buttons auf der html-seite eine "nachricht" an das delphiprogramm geschickt wird, "Button wurde gedrückt..."
wozu ich das brauche?

eine anlage wird über ein webio(webinterface) von einem delphiprogramm gesteuert, das auf einem hauptrechner läuft.
es gibt zwei auswahlmöglichkeiten, was die anlage machen soll, welche über die buttons ausgewählt werden.

nun soll aber zusätzlich ein beliebiger andere pc an dieses netzwerk angeschlossen werden und eben falls die anlage bedienen können. auf dem 2. rechner soll aber keine software oder ähnliches installiert werden.
deswegen dachte ich es wäre das günstigste sowas über den explorer des 2. rechners zu "steuern".
wozu man das braucht? das ganze soll zu demonstrationszwecken dienen.
ich wäre euch sehr dankbar, wenn ich einige vorschläge von euch bekommen würde.


mkinzler - Do 25.10.07 21:09

http://www.delphipraxis.net/topic121518_delphiprogramm+steuern+duch+phpbutton.html


Tilman - Do 25.10.07 22:00

Ich würd mal sagen du speicherst einfach per PHP einen Wert in eine Datei (glaube fopen, fputs, fgets, freads heißen die funktionen). Im Delphi-Proggi wird diese Datei dann immer wieder per Timer ausgelesen, und sobald sich was tut die Aktion ausgeführt (und die Datei zurückgesetzt)


Agawain - Do 25.10.07 22:13

hi

warum mußt Du den Apache verwenden?

Korrekt ohne Umwege, wäre es wenn es eine Server-Anwendung in Delphi ist.
Wenn aus irgendwelchen Gründen Apache beteiligt sein muß, da fällt mir leider nur ein, eine servlet-engine zu installieren, einen Listener in Java zu schreiben, die Anfrage dort zu empfangen und dann an Delphi-Server-weiterzuleiten.

Apache ansich kann sowas doch nicht leisten, zumindest IMHO nicht.
Widerspräche auch irgendwie dem Client-Server-Prinzip.

Gruß

Aga


Tilman - Do 25.10.07 22:28

Also bei mir funzt es, Delhpi-Programm und Script im selben Verzeichnis, Timer hab ich auf 300 gestellt:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Shape1: TShape;
    Timer1: TTimer;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  pfad: string;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  shape1.brush.Color := clRed;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  shape1.brush.Color := clGreen;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  p: Integer;
begin
  p := 0;
  try
    memo1.Lines.LoadFromFile('datei.txt');
    p := StrToInt(memo1.Lines[0]);
    deletefile('datei.txt');
  except
  end;
  case p of
    1: button1click(self);
    2: button2click(self);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  pfad := extractFilePath(paramstr(0));
end;

end.



Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
<form action="">
<input type="submit" value="Knopf 1" name="knopf">
<input type="submit" value="Knopf 2" name="knopf">
</form>

<?
  if (isset($knopf))
     {
       $f = fopen("datei.txt","w");
       switch ($knopf)
       {
         case "Knopf 1": fputs($f,"1"); echo "K1 gesetzt"; break;
         case "Knopf 2": fputs($f,"2"); echo "K2 gesetzt"; break;
       }
     }
?>


BenBE - Fr 26.10.07 00:35

Warum nicht einfach 'n Server in der Anwendung machen, und wenn 1 oder 2 über das PHP-Skript geschrieben wird, wird die entsprechende OnClick-Routine ausgeführt ...

Wenn Du schon auf Änderungen prüfst, arbeitet wenigstens mit FileChange-Notifications von Windows; das spart Dir einiges an Resourcen ...


meik - Fr 26.10.07 11:23

user profile iconTilman hat folgendes geschrieben:
Also bei mir funzt es, Delhpi-Programm und Script im selben Verzeichnis, Timer hab ich auf 300 gestellt:

ich hätte bitte eine Frage, sollte das Delphi und PHP im gleichen Pfad sein oder nicht unbedingt????

Moderiert von user profile iconNarses: Code aus dem Komplett-Zitat gekürzt.


DarkHunter - Fr 26.10.07 12:02

Es gibt doch in PHP mehrere Funktionen um externe Programme auszuführen:
http://de.php.net/manual/de/function.system.php
http://de.php.net/manual/de/function.exec.php
http://de.php.net/manual/de/function.shell-exec.php
http://de.php.net/manual/de/function.passthru.php

was spricht gegen diese Funktionen?


BenBE - Fr 26.10.07 12:03

Dagegen spricht, dass du mit diesen 4 Funktionen keine laufenden Programme direkt steuern kannst.


DarkHunter - Fr 26.10.07 12:10

Stimmt, das habe ich eben nicht bedacht.

Aber diese Kommunikation über eine Datei ist meiner Meinung nach nicht das gelbe vom Ei.

Da ebenfalls ein Rechner im Netzwerk angesprochen werden soll, könnte man nicht die Sockets [http://de.php.net/manual/de/ref.sockets.php] vom PHP nutzen?

In das Delphi-Programm kommt dann zusätzlich ein TServerSocket um die Daten zu empfangen.
Dann wird das Programm nur aktiv wenn es wirklich sein muss, sollte ein paar Ressourcen sparen.


Tilman - Fr 26.10.07 14:47

user profile iconmeik hat folgendes geschrieben:
ich hätte bitte eine Frage, sollte das Delphi und PHP im gleichen Pfad sein oder nicht unbedingt????


Die müssen nicht im selben Verzeichnis liegen. Aber dann musst du in deinem Delphi-Programm halt den kompletten Pfad zur Datei angeben.

Moderiert von user profile iconNarses: Zitat gekürzt.


meik - Di 30.10.07 10:40

user profile iconTilman hat folgendes geschrieben:
Also bei mir funzt es, Delhpi-Programm und Script im selben Verzeichnis, Timer hab ich auf 300 gestellt:


Das Delphiprogramm zeigt einen Fehler an. könnte jemand erklären wo der fehler liegen könnte??obwohl es bei Tilman das Programm funktioniert. im Anhang kann man den fehler sehen als Bild.Zur info benutze ich Delphi5.

Moderiert von user profile iconNarses: Quote gekürzt.


BenBE - Di 30.10.07 18:51

Sitzt vor dem Rechner ...

Laut der Meldung: Die Datei existiert nicht ... Steht doch alles da!!! :nixweiss:

Bitte Fullquote zu gunsten eines Back-Links rausnehmen (oder auf gezielte Sachen mit Split-Quote eingehen ...


meik - Di 30.10.07 21:43

ok, ich werde das machen. danke schön

Moderiert von user profile iconNarses: Quote entfernt... :roll: