Gibt es in meiner Funktion Fehler? (TFPHTTPServer, Dateien werden manchmal gesperrt))

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Soner
Beiträge: 724
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Gibt es in meiner Funktion Fehler? (TFPHTTPServer, Dateien werden manchmal gesperrt))

Beitrag von Soner »

Ich benutze TFPHTTPServer und ich verwende um Dateien zu servieren unten angegebene Funktion. Manchmal werden die Dateien auf Systemebene gesperrt und man kann es nicht mal in Editor öffnen. Man muss den Server neu Starten. Das passiert meistens mit Webseiten-Icons. Heute wurde eine wichtige Datei gesperrt, man konnte die Seite nicht benutzen. Es sind nicht viele Benutzer, nur Hacker und ca. 4 reguläre Benutzer.

Kann jemand irgendein Fehler bei der Funktion HtServeFile entdecken? Ich glaube, dass diese Funktion die Ursache ist, weil die gesperrten Dateien sonst nirgendwo geöffnet werden.

Code: Alles auswählen

procedure TMyHTTPServer.HandleRequest(var ARequest: TFPHTTPConnectionRequest; var AResponse: TFPHTTPConnectionResponse);

  procedure HtServeFile(AFName:string);
  var F : TFileStream;
  begin
    F:=nil;
    try
     F:=TFileStream.Create(AFName,fmOpenRead); 
     AResponse.Code:=200;
     AResponse.ProtocolVersion:='HTTP/1.1';
     AResponse.ContentType:=MimeTypes.GetMimeType(aFileExt); //aFileExt wird schon richtig gesetzt.
     AResponse.ContentLength:=F.Size;
     AResponse.ContentStream:=F;
     AResponse.SendContent;
     AResponse.ContentStream:=Nil;
    except
       on E: Exception do begin
         if DebLog then SendDebugEx('Error on file serve: '+E.Message,dlError);
         HtServeFileNotFound(aFileName); //Fehlermeldung anzeigen
       end;
    end;

    if Assigned(F) then F.Free;
  end;
  
begin
  HtServeFile('c:\html\Beispieldatei.html');
end;  

Antworten