Вы в любом случае создаёте архив, отдаёте на скачивание клиенту и сразу удаляете. Собрать архив на лету и отдать на скачивание не получится.
Создать архив можно как-то так.
$zip = new ZipArchive();
if ($zip->open($file, ZipArchive::CREATE) !== TRUE) {
throw new \Exception('Cannot create a zip file');
}
foreach($files as $file){
$zip->addFile($file[file_name], $file[local_name]);
}
$zip->close();
Затем отдаёте на скачивание клиенту. Далее вызываете функцию
unlink
, чтобы удалить временный zip.
IP тут вообще не причём. Вы работаете с обычными файлами. Генерируете уникальное название. Можно использовать time() и проблем не будет.