PHP - Text aus datei loeschen

Ich wollte mal noch was fragen, was ist eigentlich computer freundlicher, also wegen resorcen sparen, wenn ich 10 mal eine HTTP GET Anfrage sende und die Daten der einzelnen Auftrage reinschreibe oder wenn ich alle Daten aufeinmal mit einer Textdatei sende?
Oder ist beides gleich, gibts kein Vorteil bei der einen oder anderen Variante?
 
(Hab nicht das Ganze Thema im Kopf, weiß also eventuell was nicht)
Wenn die Datenmenge der Aufträge insgesamt gleich groß ist
dann ist die eine einzelne Abfrage besser.
 
Es kommt auf die Anzahl der Anfragen an.
Wie viele Anfrage wirst du von all deinen Klienten insgesamt haben?

Sind diese Klient-Programme fest mit dem Internet verbunden? Bei Handynetzen sind zusätzliche Request oft viel langsamer.
 
Also die Leute die das Programm benutzen wollen sollen ein eigenen Webserver haben.

Ich will das Programm spaeter so weiter geben das jeweils ein Benutzer sein eigenen Webserver benutzen muss. Von der Haeufigkeit der Anfragen kann man sagen jede Sekunde sendet das lokale Programm mindestens eine HTTP GET Anfrage und an dieser Anfrage sind viele Parameter an der URL dran welche mit PHP dann auf dem Webserver in die einzelnen Dateien gespeichert werden.

Die Klient Programme sind fest mit dem Internet verbunden, die senden also mindestens einmal pro Sekunde eine HTTP GET Anfrage.

Um das zu bauen haben ich Windows wininet functionen benutzt, weil ich dafuer irgendwo schon Beispiele gesehen hatte, ich selber kann eigentlich nicht mit dll Dateien und C++ und aehnliches programmieren. Aber die HTTP GET function und dann einige Parameter dran haengen war nicht schwer, den Restder Arbeit habe ich mit PHP gemacht.

Wenn ich jetzt wueste wie ich mit der HTTP POST function von Windows wininet eine Datei an mein Webserver senden kann, dann wuerde ich das auch lieber damit machen.

Die beiden HTTP Funktionen sehen so aus:

PHP:
HttpPOST("127.0.0.1", "/upload.php", params, filenames, response);
HttpGET("http://www.google.com?q=hello", response);

Bei der HttpGet() Funktion habe ich einfach lauter Parameter dran gehaengt, wer bisjen PHP kann bekommt das schon hin, aber weis jemand wie ich mit der HttpPOST() Funktion eine Datei an mein Webserver senden kann?
 
An deiner Stelle würde ich mir das mit dem 1-Sekunden-Update wirklich nochmal durch den Kopf gehen lassen. Pro Sekunde eine Anfrage? Das schreit doch gerade nach Push-Notifications. Die Pull-Technik ist hier nicht wirklich passend.

aber weis jemand wie ich mit der HttpPOST() Funktion eine Datei an mein Webserver senden kann?
HttpPOST() ist keine WinAPI oder eine andere bekannte Funktion. Wie sollen wir wissen, wie sie arbeitet?
 
Wenn du das sagst glaube ich das auch, ich muss mich bisjen einlesen wie Push-Notifications funktionieren, sowas habe ich bisher noch nie gebaut.

Ich habe gerade genauer nachgeschaut, die HttpPOST() Funktion wurde zusammengebaut aus Windows wininet Funktionen, hier der Code:

PHP:
#import "wininet.dll"




bool HttpPOST(string host, string script, string params[][], string filenames[][], string& strWebPage)
{
  int hIntrn = InternetOpenA(AGENT, INTERNET_OPEN_TYPE_DIRECT, "0", "0", 0);
  if (hIntrn == 0) {
    return (false);
  }

  int hConn = InternetConnectA(hIntrn,
                              host,
                              INTERNET_DEFAULT_HTTP_PORT,
                              NULL,
                              NULL,
                              INTERNET_SERVICE_HTTP,
                              0,
                              NULL);

  if (hConn == 0) {
    return (false);
  }

  int dwOpenRequestFlags =   // _IGNORE_REDIRECT_TO_HTTP |
                             // _IGNORE_REDIRECT_TO_HTTPS |
                             // INTERNET_FLAG_KEEP_CONNECTION |
                             // INTERNET_FLAG_NO_AUTO_REDIRECT |
                             // INTERNET_FLAG_NO_COOKIES |
                             // INTERNET_FLAG_NO_CACHE_WRITE |
                             INTERNET_FLAG_NO_UI |
                             INTERNET_FLAG_RELOAD;

  string accept[] = {"Accept: text/*\r\n"};

  int hReq = HttpOpenRequestA(hConn,
                             "POST",
                             script,
                             "HTTP/1.0",
                             NULL,
                             accept,
                             dwOpenRequestFlags,
                             NULL);

  string strBoundary = "---------------------------HOFSTADTER";
  string strContentHeader = "Content-Type: multipart/form-data; boundary=" + strBoundary;

  HttpAddRequestHeadersA(hReq, strContentHeader, StringLen(strContentHeader), HTTP_ADDREQ_FLAG_REPLACE);

  int i     = 0,
      idx   = 0,
      r     = 0,
      len   = 0
  ;

  string hdr = "";

  int _req = FileOpen(REQUEST_FILE, FILE_BIN|FILE_WRITE);
  if(_req <= 0) {
    return (false);
  }

  // Add parameters to request body

  for (i = ArrayRange(params, 0) - 1; i >= 0; i--) {
    hdr = StringConcatenate(
      "--", strBoundary, "\r\n",
      "Content-Disposition: form-data; name=\"", params[i][0], "\"\r\n\r\n",
      params[i][1], "\r\n");
    FileWriteString(_req, hdr, StringLen(hdr));
  }

  // Add files to request body
  
  for (i = ArrayRange(filenames, 0) - 1; i >= 0; i--) {
    hdr = StringConcatenate(
      "--", strBoundary, "\r\n",
      "Content-Disposition: form-data; name=\"", filenames[i][0], "\"; filename=\"", filenames[i][1], "\"\r\n",
      "Content-Type: application/octet-stream\r\n\r\n");

    FileWriteString(_req, hdr, StringLen(hdr));

    int handle = FileOpen(filenames[i][1], FILE_BIN|FILE_READ);
    if(handle <= 0) {
      return (false);
    }
    len = FileSize(handle);
    for (int b = 0; b < len; b++) {
      FileWriteInteger(_req, FileReadInteger(handle, CHAR_VALUE), CHAR_VALUE);
    }
    FileClose(handle);
  }

  string boundaryEnd = "\r\n--" + strBoundary + "--\r\n";
  FileWriteString(_req, boundaryEnd, StringLen(boundaryEnd));

  FileClose(_req);

  // Re-reads saved POST data byte-to-byte from file in the pseudo-character array
  //  we need to send with HttpSendRequestA. This is due to the fact I know no clean
  //  way to cast strings _plus_ binary file contents to a character array in MQL.
  //  If you know how to do it properly feel free to contact me.

  int request[];

  _req = FileOpen(REQUEST_FILE, FILE_BIN|FILE_READ);
  if (_req <= 0) {
    return (false);
  }
  len = FileSize(_req);

  ArrayResize(request, len);
  ArrayInitialize(request, 0);

  for (i = 0; i < len; i++) {
    request[r] |= FileReadInteger(_req, CHAR_VALUE) << (idx * 8);
    idx = (idx + 1) %4;
    if (idx == 0) {
      r++;
    }
  }
  FileClose(_req);

  if (!HttpSendRequestA(hReq, NULL, 0, request, len)) {
    return (false);
  }

  // Read response

  int     lReturn[]  = {1};
  string  sBuffer    = "";

  while (TRUE) {
    if (InternetReadFile(hReq, sBuffer, BUFSIZ, lReturn) <= 0 || lReturn[0] == 0) {
      break;
    }
    strWebPage = StringConcatenate(strWebPage, StringSubstr(sBuffer, 0, lReturn[0]));
  }

  InternetCloseHandle(hReq);
  InternetCloseHandle(hConn);
  InternetCloseHandle(hIntrn);

  return (true);
}
 
PHP Push Notification ist sowas wie Nachrichten auf Smartphone senden oder?
Was ich machen muss ist aber Daten austauschen und nicht Nachrichten senden.
Ich habe ja mein Handelsprogramm das laeuft auf dem PC und ist mit dem Internet verbunden und empfaengt die ganze Zeit Daten und ich sende deswegen zwischen mein Webserver und dem Handelsprogramm die Daten hin und her.
Wenn jemand beispielweise vom Webserver aus durch benutzen von einem HTML Formuar ein Auftrag sendet muss mein Handelsprogramm das merken, deswegen lass ich ihn jede Sekunden nachschauen.
 
Und was ich auch noch fragen wollte, ob es besser ist mit HTTP POST die Datei auf den Webserver zu senden oder die Windows wininet FTP Fileupload Funktion zu benutzen, also beispielweise jede Sekunde eine Datei mit FTP oder mit HTTP POST hoch schicken, was ich besser von beiden?
 
Das oben ist sicher kein (reiner) C oder C++-Code (wegen dem #import).

PHP Push Notification ist sowas wie Nachrichten auf Smartphone senden oder?
Das ist nicht an Smartphones gekoppelt. Es geht darum, dass man kontinuierlich vom Server Daten zum Clienten schickt mit einer "längeren geöffneten Verbindung". Die Verbindung wird nicht jedesmal neu eröffnet, stattdessen bleibt sie einfach erhalten. Somit fallen auch die Overheads großteils wegen den HTTP-Headern weg.

POST vs FTP: hier steht was zu: http://stackoverflow.com/questions/1238761/http-vs-ftp-upload
 
Die Meinungen sind aber sehr unterschiedlich, ein wenig hoert sich es so an das HTTP besser waere als FTP.

Wie kompliziert ist es eigentlich so eine kontinuierliche Server Client Verbindung zu programmieren, koennte ich das in ein Tag mithilfe von einem Tutorial schon hinbekommen oder muss man da erst lauter Hintergrundinfos studieren?
 
Zurück