Создание .zip с php

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

function crear_zip($id_paciente){
    $files = array( 'C:\\xampp\\htdocs\\bitnami.txt' );
    $zipname = 'C:\\xampp\\htdocs\\zipped_file.zip';
    $zip = new ZipArchive;
    $zip->open($zipname, ZipArchive::CREATE); 
    foreach ($files as $file) {
      $zip->addFile($file);
    }
    $zip->close();
}

Проблема состоит в том, что в .zip он помещает меня, - копия маршрута q я дал ему и не файл пробовал давая ему только имя файла, но, как кажется, это не находит и мне не создает .zip.: какая-то идея?. Спасибо заранее

4
задан 27.12.2016, 17:43
0 ответов

Проблема состоит в том, что ты не перемещаешь его второй параметр в функцию $zip->addFile, и следовательно прими то же имя файла (включая маршрут).

Согласно документации: (свободный мой перевод)

bool ZipArchive:: addFile (string $filename [string $localname])

filename
Маршрут в файл, который добавляется.

localname
Локальное имя внутри файла ZIP.

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

Ты должен тогда перемещать второй параметр, и в этот использует только имя файла (для которого ты можешь воспользоваться функцией basename. Что-то сходное в:

function crear_zip($id_paciente){
    $files = array( 'C:\\xampp\\htdocs\\bitnami.txt' );
    $zipname = 'C:\\xampp\\htdocs\\zipped_file.zip';
    $zip = new ZipArchive;
    $zip->open($zipname, ZipArchive::CREATE); 
    foreach ($files as $file) {
      $localfile = basename($file);
      $zip->addFile($file, $localfile);
    }
    $zip->close();
}
6
ответ дан 03.12.2019, 17:58
  • 1
    Если! большое спасибо. это было!. вопрос я стараюсь искать эти файлы сервера в этих моментах нахожусь в помещении. и его переместил маршрут localhost/hc_prod/public/archivo_pacientes/639/SW601805.pdf , если я открываю этот url, меня приносит pdf, но мне не верил .zip. в какую-то идею? –  27.12.2016, 18:13
  • 2
    @Laura, ты должен перемещать маршрут в локальной системе файлов, не url. А именно, если está s в windows, c:\ruta\de\la\carpeta\archivo.pdf, и если está s в *nix немного как /var/local/archivo.pdf –  27.12.2016, 18:16
  • 3
    Большое спасибо :) уже probé и если. - это. –  27.12.2016, 18:27