yusuf: EinwegDatei: send & delete

Hallo,
ich möchte, dass die vom Client aufgerufenen binären Dateien abgeschickt und anschließend gelöscht werden, so dass auf dem Server keine Kopien bleiben.
Weiß jemand, wie das geht?
Die Verzögerung wie sleep(n) funktioniert unzuverlässig, einige Dateien wurden frühzeitig gelöscht, obwohl n=10, und überhaupt ich will keine Zeitsteuerung.

  1. Hi,

    ich möchte, dass die vom Client aufgerufenen binären Dateien abgeschickt und anschließend gelöscht werden, so dass auf dem Server keine Kopien bleiben.

    ich verstehe dein Konzept nicht ganz - und dadurch auch dein Problem nicht wirklich. Du hast also Dateien auf deinem Server liegen, die darauf warten, dass sie irgendwann mal abgerufen werden, und die dann gelöscht werden sollen, damit sie kein zweites Mal abgerufen werden können?

    Mal abgesehen davon, dass ich die Idee nicht sinnvoll finde, schlage ich vor, dass du diese Dateien in ein Verzeichnis legst, das nicht per HTTP erreichbar ist. Dann lieferst du sie über ein Download-Script aus, das nur einfach die Datei durchreicht (readfile() ist dein Freund hier), und sofort danach die Datei löscht.

    Oder handelt es sich um dynamisch erzeugte Daten? Dann würde ich sie gar nicht erst als Datei speichern, sondern direkt ausliefern.

    Egal wie - das Löschen nach dem Abruf kann ich nicht wirklich gutheißen. Bei der Übertragung der Ressource zum Client kann immer mal irgendwas schiefgehen, und wenn er dann keine Chance hat, den Download zu wiederholen ... :-(

    Die Verzögerung wie sleep(n) funktioniert unzuverlässig, einige Dateien wurden frühzeitig gelöscht, obwohl n=10, und überhaupt ich will keine Zeitsteuerung.

    Ist auch vermutlich überhaupt nicht nötig.

    So long,
     Martin

    --
    Es sagte...
    ein korpulenter Lehrer zu einem Schüler, der ihn ein Fass genannt hatte: "Nein. Ein Fass ist von Reifen umgeben, ich dagegen von Unreifen."
    1. Hi,

      ich möchte, dass die vom Client aufgerufenen binären Dateien abgeschickt und anschließend gelöscht werden, so dass auf dem Server keine Kopien bleiben.

      ich verstehe dein Konzept nicht ganz - und dadurch auch dein Problem nicht wirklich. Du hast also Dateien auf deinem Server liegen, die darauf warten, dass sie irgendwann mal abgerufen werden, und die dann gelöscht werden sollen, damit sie kein zweites Mal abgerufen werden können?

      verwende ich oft...

      Mal abgesehen davon, dass ich die Idee nicht sinnvoll finde, schlage ich vor, dass du diese Dateien in ein Verzeichnis legst, das nicht per HTTP erreichbar ist. Dann lieferst du sie über ein Download-Script aus, das nur einfach die Datei durchreicht (readfile() ist dein Freund hier), und sofort danach die Datei löscht.

      richtig (oder open(in, "meine Datei") in perl).

      Oder handelt es sich um dynamisch erzeugte Daten? Dann würde ich sie gar nicht erst als Datei speichern, sondern direkt ausliefern.

      kann beides sinnvoll sein.

      Egal wie - das Löschen nach dem Abruf kann ich nicht wirklich gutheißen. Bei der Übertragung der Ressource zum Client kann immer mal irgendwas schiefgehen, und wenn er dann keine Chance hat, den Download zu wiederholen ... :-(

      Die Verzögerung wie sleep(n) funktioniert unzuverlässig, einige Dateien wurden frühzeitig gelöscht, obwohl n=10, und überhaupt ich will keine Zeitsteuerung.

      Ist auch vermutlich überhaupt nicht nötig.

      Ich glaube, hier gibt es das Hauptproblem!
      Ich nehme an, da wird entweder etwas nicht seriell abgearbeitet (system-Aufruf, der nicht abgewartet wird?) wird oder das Problem steckt woanders.
      Schreib Dir mal Ausgaben vor der Stelle, wo das File noch da sein sollte und dahinter, also wo Du löschst.
      Passiert die Löschung unerwartet? Ist Sie von Bedingungen abhängig, die nicht richtig abgefragt werden? ....

      lg
      Reiner

      1. Danke für die Antworten!
        Die Dateien sind für konkrete Personen bestimmt, nicht dynamisch erzeugt und müssen nach dem erfolgreichen Download gelöscht werden. Diese Personen können auf ihre Dateien nur per HTTP zugreifen. Ich darf nur php benutzen und habe im Unterschied zu Server-Programmierern keine weiteren Möglichkeiten.