PHP скачать файлы с readfile, а затем удалить проблему - PullRequest
0 голосов
/ 22 февраля 2011

Здравствуйте, я использую следующий скрипт для загрузки файлов с php:

$archive = tempnam("//somepath/mms_1/MMS_SERVICE/","asset");
$zipobject = new ZipArchive();
$zipobject->open($archive, ZIPARCHIVE::CREATE);
$zipobject->addFile('somefile', '');
......
$zipobject->close();

$filesize = filesize($archive);

$timestamp=date('d-m-y_H-i');
header("Content-type: application/x-zip-compressed");
header("Content-Disposition: attachment; filename=Assets_$timestamp.zip  ");
header("Content-Description: Download PHP");
header("Content-Length: filesize ");
header("Content-Transfer-Encoding: binary");
readfile_chunked($archive);
unlink($archive);

Проблема в том, что php не удаляет временный zip-файл после завершения загрузки, или когда пользователь прерывает загрузку, или когда покидает страницу. Похоже, что unlink никогда не выполняется в этих случаях ignore_user_abort (true); функция, но это не решает проблему. Кто-нибудь может предложить решение для этого?

Ответы [ 3 ]

0 голосов
/ 13 марта 2011
$filesize = filesize($archive);  
$timestamp=date('d-m-y_H-i'); 
header("Content-type: application/x-zip-compressed"); 
header("Content-Disposition: attachment; 
filename=Assets_$timestamp.zip  "); 
header("Content-Description: Download PHP"); 
header("Content-Length:" **.$filesize** ); 
header("Content-Transfer-Encoding: binary"); 
if ($archive != ''){ 
 $fileData = @file_get_contents($archive);
 echo $fileData;
 unlink($archive);
}

попробуйте предложение выше.Я не пробовал вашу версию, но она работает для меня, поэтому, за исключением любых проблем с доступом, она должна работать и для вас.(Я выделил жирным шрифтом (двойные звездочки) код, который я изменил из вашей версии)

0 голосов
/ 19 февраля 2014

Где вы указали ignore_user_abort (true);?Это должно быть перед readfile

0 голосов
/ 22 февраля 2011

Попробуйте использовать вызов register-shutdown в php, чтобы ваша функция очистки всегда работала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...