За последние 24 часа нас посетили 17463 программиста и 1722 робота. Сейчас ищет 1001 программист ...

zip папки

Тема в разделе "PHP для новичков", создана пользователем vikrorpert, 27 дек 2011.

  1. vikrorpert

    vikrorpert Активный пользователь

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    нужно зипнуть папку
    решил делать это через команду exec('zip -r ')

    проблема в том что exec выводит инфу в поток

    как это убрать? и вобще правильно ли так делать или может использовать сжатие через пхп?
     
  2. ss64

    ss64 Активный пользователь

    С нами с:
    25 мар 2010
    Сообщения:
    35
    Симпатии:
    0
    Exec лучше не использовать, похацкают и это не шутка :)
    Многие умы пали, под грозным натиском кулхацкеров :)

    По своему опыту скажу, что это самая п*тая вещь, которую придумало человечество:
    http://php.net/manual/en/function.ziparchive-open.html


    Должно быть легко и просто:

    Код (Text):
    1.  
    2. $zip = new ZipArchive;
    3. $res = $zip->open('test.zip', ZipArchive::CREATE);
    4. $zip->addFromString('test.txt', 'file content goes here');
    5. $zip->addFile('data.txt', 'entryname.txt');
    6. $zip->close();
    Фишка в том, что надо самостоятельно, рекурсивно заталкивать все файлы в этот архив.
     
  3. vikrorpert

    vikrorpert Активный пользователь

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    а как могут похацкать если у меня в exec не передаются команды из querystring
     
  4. ss64

    ss64 Активный пользователь

    С нами с:
    25 мар 2010
    Сообщения:
    35
    Симпатии:
    0
    Тогда это прекрасно, в целом не очень понимаю какой у тебя лишний вывод ведется,
    на крайняк пробни так
    ob_start();
    exec('gzip -R');
    ob_end_clean();

    аналогично можно сделать так

    $output = `gzip -R`;
    Весь вывод, пойдет в переменную, по идее exec тоже ничего не должен выводить на экран.
     
  5. ss64

    ss64 Активный пользователь

    С нами с:
    25 мар 2010
    Сообщения:
    35
    Симпатии:
    0
    Кстате
    string exec ( string $command [, array &$output [, int &$return_var ]] )

    command
    Команда (имя программы с аргументами - прим.пер.), которая будет исполнена.


    output
    Если параметр output указан, то массив будет заполнен строками вывода программы. Завершающие пробелы, такие как \n (перевод строки - прим.пер.), включены в массив не будут. Обратите внимание, что если массив уже содержит какие-либо элементы перед вызовом функции exec(), то вывод команды будет дописан в конец массива. Если же вы не хотите дополнять предыдущее содержимое массива, следует вызвать функцию unset() с именем массива в качестве аргумента перед его передачей в качестве аргумента функции exec().

    return_var
    Если заданы оба параметра return_var и output, то при выходе эта переменная будет содержать статус завершения внешней программы.
    http://php.net/manual/ru/function.exec.html

    Вторым параметром передай какую нить переменную, он будет туда толкать всё.
    Воистину экзотическая функция :)