php создание zips без пути к файлам внутри zip

Я пытаюсь использовать php для создания zip-файла (который он делает – взятый с этой страницы – http://davidwalsh.name/create-zip-php ), однако внутри zip-файла все имена папок для сам файл.

Возможно ли просто иметь файл внутри zip минус все папки?

Вот мой код:

function create_zip($files = array(), $destination = '', $overwrite = true) { if(file_exists($destination) && !$overwrite) { return false; }; $valid_files = array(); if(is_array($files)) { foreach($files as $file) { if(file_exists($file)) { $valid_files[] = $file; }; }; }; if(count($valid_files)) { $zip = new ZipArchive(); if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) { return false; }; foreach($valid_files as $file) { $zip->addFile($file,$file); }; $zip->close(); return file_exists($destination); } else { return false; }; }; $files_to_zip = array('/media/138/file_01.jpg','/media/138/file_01.jpg','/media/138/file_01.jpg'); $result = create_zip($files_to_zip,'/...full_site_path.../downloads/138/138_files.zip'); 

Solutions Collecting From Web of "php создание zips без пути к файлам внутри zip"

Проблема здесь в том, что $zip->addFile передаются те же два параметра.

Согласно документации :

bool ZipArchive :: addFile (строка $ filename [, string $ localname ])

имя файла
Путь к файлу, который нужно добавить.

LocalName
локальное имя внутри ZIP-архива.

Это означает, что первым параметром является путь к фактическому файлу в файловой системе, а второй – путь и имя файла, которые файл будет иметь в архиве.

Когда вы укажете второй параметр, вы захотите удалить путь из него при добавлении его в zip-архив. Например, в системах на базе Unix это будет выглядеть так:

 $new_filename = substr($file,strrpos($file,'/') + 1); $zip->addFile($file,$new_filename); 

Я думаю, что лучший вариант:

 $zip->addFile($file,basename($file)); 

Это просто извлекает имя файла из пути.

Это еще один метод, который я нашел для меня

 $zipname = 'file.zip'; $zip = new ZipArchive(); $tmp_file = tempnam('.',''); $zip->open($tmp_file, ZipArchive::CREATE); $download_file = file_get_contents($file); $zip->addFromString(basename($file),$download_file); $zip->close(); header('Content-disposition: attachment; filename='.$zipname); header('Content-type: application/zip'); readfile($tmp_file);