Ako zmazať temp subor posielany cez sendResponse
- japlavaren
- Člen | 404
ahoj,
v aplikacii generujem subor ktory sa generuje do temp adresaru. Ako zmazat tento subor po jeho odoslani do prehliadaca? Skusal som nieco ako
<?php
public function renderFile()
{
try {
$file = $this->docService->create();
$this->sendResponse(new FileResponse($file));
} finally {
$this->docService->cleanup();
}
}
?>
problem je ze send response interne vyhodi AbortException
a
finally sa zavola skor ako sa to odosle do prehliadaca
- jiri.pudil
- Nette Blogger | 1032
Můžeš to třeba navěsit do shutdown funkce. Ale spíš bych volil cestu přímého vypsání obsahu souboru, pak vůbec nepotřebuješ ukládat nic na disk :)
- japlavaren
- Člen | 404
jiri.pudil napsal(a):
Můžeš to třeba navěsit do shutdown funkce. Ale spíš bych volil cestu přímého vypsání obsahu souboru, pak vůbec nepotřebuješ ukládat nic na disk :)
Shutdown funkcia sa mi nepaci. Pouzivam plugin ktory to nedokaze vratit ako string ale uklada do suboru. A nacitavat to zo suboru a a predavat to do response sa mi velmi nepaci.
- Mysteria
- Člen | 797
Co takhle použít dočasnej soubor, který se maže sám po skončení
skriptu https://secure.php.net/….tmpfile.php.
Případně můžeš periodicky cronem mazat třeba soubory starší
než den.
- David Matějka
- Moderator | 6445
podedil nebo odekoroval bych FileResponse, aby to po odeslani soubor smazalo
- japlavaren
- Člen | 404
Mysteria napsal(a):
Co takhle použít dočasnej soubor, který se maže sám po skončení skriptu https://secure.php.net/….tmpfile.php.
Případně můžeš periodicky cronem mazat třeba soubory starší než den.
tmpfile()
som pozeral ale ten vrati handler a PHPWord pracuje
s nazvom suboru. To mi nepomoze. A mazanie cronom by bola tiez moznost ale
pride mi to dost komplikovane na takuto blbost.
- japlavaren
- Člen | 404
David Matějka napsal(a):
podedil nebo odekoroval bych FileResponse, aby to po odeslani soubor smazalo
To ma nenapadlo a prijde mi to ako najlepsi napad.
- japlavaren
- Člen | 404
Nakoniec som to vyriesil takto:
<?php
$this->sendResponse(new CallbackResponse(function (IRequest $request, IResponse $response) {
try {
$file = $this->docService->createDoc();
(new FileResponse($file))->send($request, $response);
} finally {
$this->docService->cleanup();
}
}));
?>
Editoval japlavaren (6. 11. 2018 11:48)