Проблема здесь в том, что $zip->addFile
передаются те же два параметра.
Согласно документации :
bool ZipArchive :: addFile (строка $ filename [, строка $ localname ])
filename
Путь к файлу
локальное имя
локальное имя внутри ZIP-архива.
Это означает, что первым параметром является путь к фактическому файлу в файловой системе.а второй - это путь и имя файла, которые файл будет иметь в архиве.
Когда вы укажете второй параметр, вы захотите убрать из него путь при добавлении его в zip-архив.Например, в системах на основе Unix это будет выглядеть так:
$new_filename = substr($file,strrpos($file,'/') + 1);
$zip->addFile($file,$new_filename);