Я использую это для отправки файла пользователю
header('Content-type: application/zip');
header('Content-Length: ' . filesize($file));
header('Content-Disposition: attachment; filename="file.zip"');
readfile($file);
Я хочу удалить этот файл после того, как пользователь загружает его, как я могу сделать это?
Править: Мой сценарий похож на это, когда пользователь поразит кнопку загрузки, мой сценарий создаст временный zip-файл, и пользователь загружают его затем, что временный zip-файл будет удален.
EDIT2: хорошо лучший способ кажется выполнением задания крона, которое будет чистить временные файлы раз в час.
EDIT3: Я протестировал свой сценарий с unlink
, это работает если пользовательская отмена загрузка. Если пользователь отменяет загрузку, zip-файл остается на сервере. Таким образом, это достаточно на данный момент.:)
EDIT4: НИЧЕГО СЕБЕ! connection_aborted()
сделанный приемом!
ignore_user_abort(true);
if (connection_aborted()) {
unlink($f);
}
Этот удалит файл даже если пользовательская отмена загрузка.
unlink($filename);
Это удалит файл.
Его необходимо объединить с ignore_user_abort ()
Docs , чтобы unlink
по-прежнему выполнялся, даже если пользователь отменил загрузку.
ignore_user_abort(true);
...
unlink($f);
Нет никакого правильного способа определить, был ли файл полностью загружен пользователем или нет.
Поэтому лучше всего удалить файл после некоторого периода бездействия.
Самый безопасный способ, который я могу придумать, - это использовать какой-нибудь флеш-фильм на стороне клиента, который может наблюдать за передачей со стороны клиента, а затем выполнить вызов XmlHttpRequest на сервер после завершения загрузки.
Насколько я знаю, надежного способа сделать это без Flash (или аналогичного плагина для браузера) невозможно.