2013-09-20 4 views
0

У меня есть код PHP, который я использую, чтобы попробовать и застегнуть папку. В папке есть две подпапки и несколько отдельных файлов.PHP ZIP создание вложенных папок в виде файлов

Вот код: -

<?php 

    $src = $_POST['srcin']; 
    $dst = $_POST['dstin']; 

    $zip = new ZipArchive; 
    $zip->open($dst, ZipArchive::CREATE); 
    if (false !== ($dir = opendir($src))) 
     { 
      while (false !== ($file = readdir($dir))) 
      { 
       if ($file != '.' && $file != '..') 
       { 
    $ans = DIRECTORY_SEPARATOR; 
          $zip->addFile($src.DIRECTORY_SEPARATOR.$file); 
       } 
      } 
     } 
     else 
     { 
      die('Can\'t read dir'); 
     } 
    $zip->close(); 

    echo json_encode('Folder Compressed'); 

?> 

Входные значения являются: -

srcin = "TestFolder" dstin = "TestFolder.zip".

Что происходит, так это то, что я получаю zip-файл. Однако подпапки создаются в виде файлов.

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

Любая помощь очень ценится.

Благодаря

Martin

+0

Судя по всему, он не проверяет, если что-нибудь под '$ src' папка/и действует соответствующим образом. Возможно, создайте возможную рекурсивную функцию и проверьте, является ли '$ file' каталогом, если да, передайте ее функции, чтобы прочитать ее. Рекурсивным было бы мое предложение, поэтому вы можете передать '$ src' этой функции. Я не могу создать ответ с любым кодом, так как вы не указываете, какую библиотеку вы используете, поэтому я не смог бы ее протестировать. – Jon

ответ

1

Вы должны создать каталог с addEmptyDir, прежде чем добавить файл к нему.

Here пример (см верхний комментарий) как заархивировать каталог рекурсивно

+0

Я пробовал некоторые из примеров по этой ссылке. Появится пример с надписью «Вот стековый способ для zip-каталога. Нет рекурсии, нет функции, нет класса:« похоже, работает. Хотя я получаю ошибку от PHP. Бог знает, почему. –

+0

@MartinShinks, какая ошибка? – baldrs

+0

Я вызываю PHP из AJAX Используя ошибку кода: function (xhr, ajaxOptions, thrownError) {alert ("ZIP" + xhr.status); оповещения (thrownError); Я получаю два всплывающих окна. Первый из них содержит 200, второй - «JSON Parse, неожиданный конец данных». Я занимаюсь PHP примерно 20 часов. –

Смежные вопросы