Mein System erstellt temporäre Dateien und sendet sie zum Download. Dieser Teil funktioniert sehr gut. Das Problem ist, dass ich diese Dateien aus dem Dateisystem nach dem Download der Datei oder einfach danach irgendwann in der Zeit löschen möchte, aber scheint nach AfterFilter() -Funktion, die die letzte Controller-Methode ausgeführt wird, noch bevor die Datei ausgeführt wird heruntergeladen, so ist keine Möglichkeit oder ich vermisse etwas.Datei nach dem Download mit Antwort in CakePHP löschen
Ich habe diese Funktionen in einem DowloaderController
public function download() {
$fileName = $this->Session->read('nameFile');
if (!is_file(STORAGEPATH . $fileName)) {
return;
}
$this->response->file(STORAGEPATH . $fileName);
$this->response->download($fileName);
return $this->response;
}
und
public function afterFilter() {
if ($this->Session->check('nameFile')) {
if (is_file(STORAGEPATH . $this->Session->read('nameFile'))) {
@unlink(STORAGEPATH . $this->Session->read('nameFile'));
}
$this->Session->delete('nameFile');
}
}
In einer früheren Version von Kuchen, benutzte ich wie etwas zu verwenden:
$this->viewClass = 'Media';
$params = array(
'id' => $fileName,
'name' => $fileAlias,
'download' => true,
'extension' => $extension,
'path' => $path
);
$this->set($params);
und hat gut funktioniert , aber jetzt tut es nicht
Gibt es eine Möglichkeit, die temporäre Datei sofort nach dem Downloaden zu trennen?
oder
, was Sie haben, dieses Problem zu lösen getan?
mit CakePHP 2.8
Es gibt keine Möglichkeit von PHP zu wissen, wann eine Datei heruntergeladen wurde. Sobald Sie die Datei zurück zum Client gelesen haben, ist PHP abgeschlossen, ob der Client fertig ist, die Datei zu speichern oder nicht. Die Clientseite signalisiert dem Server nicht, dass sie "Ich bin fertig" sagen soll. –
Danke, dass du mir das erzählt hast, ich wusste es nicht. ok ok, aber muss ein anderer Weg sein, um diese Dateien zu kontrollieren, ich denke, ich benutze kein Ereignis oder einen Rückruf von Kuchen, wenn sie die Aktion nicht kontrollieren können. Ich werde versuchen, eine Header-Location und umleiten zu einer anderen Methode mit der Antwort, aber ich möchte nicht wirklich eine Umleitung tun, weil es eine Download-Aktion ist. Könntest du das wissen, könntest du ein anderer Weg sein oder alternativ, um diese besondere Situation zu lösen? – Antonycx
Sie müssen den Cron-Job ausführen, um temporäre Dateien zu löschen (nur alte Dateien löschen). – Manmohan