AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke PHP-Script von Desktop-Anwendung aus anstoßen
Thema durchsuchen
Ansicht
Themen-Optionen

PHP-Script von Desktop-Anwendung aus anstoßen

Ein Thema von runningsoft · begonnen am 7. Okt 2020 · letzter Beitrag vom 9. Okt 2020
Antwort Antwort
Benutzerbild von runningsoft
runningsoft

Registriert seit: 8. Okt 2004
Ort: Bernau
108 Beiträge
 
Delphi 10.4 Sydney
 
#1

PHP-Script von Desktop-Anwendung aus anstoßen

  Alt 7. Okt 2020, 10:12
Hallo zusammen,

ich habe folgende Problemstellung:
aus einer Desktopanwendung lade ich periodisch per FTP-Upload eine CSV-Datei auf meinen Webserver. Dort müssen nun die Daten per PHP-Script in eine Datenbank eingelesen werden.

Meine Frage ist nun: wie stoße ich am elegantesten das PHP-Script aus meiner Desktopanwendung heraus an?
Mein bisheriger Ansatz ist, über einen unsichtbaren TWebBrowser timergesteuert das PHP-Script aufzurufen. Das funktioniert auch, soweit ich das bis jetzt überblicke, gut.

Gibt es noch eine andere Lösungsmöglichkeit?

Vielen Dank vorab für Eure Antworten.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: PHP-Script von Desktop-Anwendung aus anstoßen

  Alt 7. Okt 2020, 10:14
Per TIdHTTP oder THTTPClient (System.Net.HttpClient) wäre deutlich eleganter als über einen TWebbrowser.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von runningsoft
runningsoft

Registriert seit: 8. Okt 2004
Ort: Bernau
108 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: PHP-Script von Desktop-Anwendung aus anstoßen

  Alt 7. Okt 2020, 10:30
Danke für den Tip. ich glaub, das wars schon. Der erste Test funktioniert.
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
655 Beiträge
 
Delphi 12 Athens
 
#4

AW: PHP-Script von Desktop-Anwendung aus anstoßen

  Alt 7. Okt 2020, 10:39
Und wenn du es noch so umbaust, dass du deine Daten nicht gesondert per FTP ablegst, sondern auch direkt mit in den HTTP-Request einbaust (z.B. im Body eines POST) und dein PHP-Skript die sich da abholt, dann wäre es wahrscheinlich richtig cool.
  Mit Zitat antworten Zitat
Benutzerbild von runningsoft
runningsoft

Registriert seit: 8. Okt 2004
Ort: Bernau
108 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: PHP-Script von Desktop-Anwendung aus anstoßen

  Alt 7. Okt 2020, 16:16
Danke für den Tipp, ist natürlich eleganter, alles in einem Rutsch zu erledigen.

Mit ziemlich viel googlen hab ich es jetz hinbekommen
Falls es später jemand interessiert hier mein Ansatz
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  filename: TFileName;
  Data : TIDMultiPartFormDataStream;
begin
  filename := 'liveresults.CSV';

  if FileExists(filename) then
    begin
      try
        Data := TIdMultiPartFormDataStream.Create;
        Data.AddFile('userfile', filename, 'csv');
        Data.Position := 0;
        Memo1.Lines.Text := IdHTTP1.Post('http://bla-bla/admin/test.php', Data);
      finally
        Data.Free;
      end;

    end;
end;
Und das dazugehörige PHP-Script:
Code:
<?php
//Dateiupload entgegennehmen
$uploaddir = getcwd() . "/upload/"; // getcwd = Gets the current working directory
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

//verschiebt hochgeladene Datei aus TMP-Verzeichnis ins Upload-Verzeichnis und setzt wieder den erwarteten Dateinamen
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile))
  {
  $HasUploaded = true;
  }
else
  {
  $HasUploaded = false;
  }

//wenn erfolgreich hochgeladen, weiterverarbeiten
if ($HasUploaded)
  {
  $i = 0;
  //Datei zum lesen öffnen
  $fp = fopen('upload/liveresults.CSV',"r");
  while (!feof($fp))
    {
    $i++;
    //Zeilenweise einlesen
    $str = fgets($fp,500);
    //Leerzeilen überspringen
    if ($str > "")
      {
      //Kontrollausgabe, ob alle Daten angekommen sind
      //hier muss später die Verarbeitung (=Einlesen in DB) eingefügt werden
      echo "Zeile " . $i . ": " . $str;
      }
    }
  }
else
  {
  echo"Datei konnte nicht hochgeladen werden";
  }
?>
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.087 Beiträge
 
Delphi 12 Athens
 
#6

AW: PHP-Script von Desktop-Anwendung aus anstoßen

  Alt 7. Okt 2020, 16:59
Halllo Steffen,

danke für den Code, ich habe in Zukunft ähnliches vor,
und möchte von FTP zu HTTP wechseln.

Was mir dabei allerdings unklar ist, welcher maximale File-Size ist möglich.
Angeblich gibt es da keine Grenze, aber es wird sicher praktische Grenzen für den Upload geben.
Z.B. irgendwas das Apache definiert.

Was passiert wenn ein Upload scheitert, gibt es dann IMMER eine ordentliche Fehlermeldung per HTTP ?

Das sind alles Fragen die ich mir noch beantworten müsste.
Mein Upload liegt im Moment bei ca. 3 MB, , deshalb mache ich mir noch keine großen Sorgen darum, aber es kann auch mal größer werden.

Hast Du damit schion probiert wie zuverlässig das Ganze ist ?
Bei FTP kann man zumindest nochmal "nachladen" ohne Probleme.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: PHP-Script von Desktop-Anwendung aus anstoßen

  Alt 7. Okt 2020, 23:57
Es gibt mehrere Grenzen und letztendlich kommt es auf die Configuration des Servers drauf an.

Der HTTP-Server hat ein paar Limits
und dann natürlich auch nochmal das dranhängende PHP-Modul.


Du kannst deinen Provider fragen
oder selbst nachsehn.

> upload_max_filesize
http://www.selfphp.de/funktionsrefer...en/phpinfo.php
http://www.selfphp.de/funktionsrefer...en/ini_get.php
http://www.selfphp.de/funktionsrefer...ni_get_all.php

https://stackoverflow.com/questions/...load-file-size
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#8

AW: PHP-Script von Desktop-Anwendung aus anstoßen

  Alt 8. Okt 2020, 09:08
Einen Aspekt vermisse ich hier noch: die HTTP-Lösung ist so wie beschrieben noch ohne jede Zugriffskontrolle, der FTP (hoffentlich SFTP/SCP) Upload dagegen schon!

Bei der Lösung über HTTP muss doppelt Wert gelegt werden auf Plausibilitätsprüfungen und natürlich eine Verarbeitung, die SQL injections ausschließt, und selbst dann kann diese Form noch von außen mit gültigen, aber falschen Werten angegriffen werden. Also muss eine Authorisierung abgefragt werden, mindestens http digest authentication, dann über https statt nur http.

Selbst wenn das "nur" was privates ist - welches vom Netz aus erreichte Server wird nicht mehrfach stündlich von automatisierten Skripten auf Lücken hin abgegrast?
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.087 Beiträge
 
Delphi 12 Athens
 
#9

AW: PHP-Script von Desktop-Anwendung aus anstoßen

  Alt 9. Okt 2020, 12:14
Hatte gerade nochmal Zeit damit rumzuspielen,
hier ein Script das Alles schön formatiert ausgibt:
Delphi-Quellcode:
<?php
echo 'Show my phpinfo():';
phpinfo();

echo 'Show my ini_get_all():';
$arr = ini_get_all();

echo "<pre>";
var_dump($arr);
echo "</pre>";
?>
Da jetzt alle Werte durchzusehen ist müssig, aber sehr interessant.

Was den Upload betrifft:
Mit 200MB wäre ich erstmal auf der sicheren Seite, aber bei großen Files hat FTP halt seine Vorteile
(ist ja auch dafür gemacht worden ).
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:28 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