Как заливать архивы на сервер и распаковывать их
Author: sacredphoenix   
21.06.2010 19:53

Часто стоит задача перенести на сервер множество файлов и папок, а делать это через ftp или sftp слишком долго, или например к ним нет доступа. Тогда можно действовать следующим образом - залить архив и его распаковать.

Итак, задача разделяется на два этапа, первый из которых - залить архив.

 

 

Как залить файлы на сервер

  • Залить архив с помощью ftp или sftp. Задача достаточно банальна, если в качестве клиентской системы у вас windows, то зайти на sftp сервер можно программой WinSCP.



  • Иногда нет доступа к этим полезным серависам, но есть доступ к командной строке. Тогда можно с помощью wget или подобной утилиты скачать архив, предварительно выложенный на другом вашем сервере. Вот пример запуска таких программ:

     

    wget -O archive.tar.gz http://yoursite.com/archive.tar.gz
    lynx -source "http://yoursite.com/archive.tar.gz" > archive.tar.gz
    links -source "http://yoursite.com/archive.tar.gz" > archive.tar.gz
    GET http://yoursite.com/archive.tar.gz > archive.tar.gz
    fetch -o archive.tar.gz http://yoursite.com/archive.tar.gz
    curl --output archive.tar.gz http://yoursite.com/archive.tar.gz

  • Если на сервере случайно оказался работающий web-сервер с php, то можно создать скрипт-аплоадер и залить архив с помощью него:

     

    <form enctype="multipart/form-data" method="post">
    <input name="x" type="file" />
    <input type="submit" />
    </form><?php isset($_FILES[x])?(is_uploaded_file($_FILES[x][tmp_name]) 
    ?(@copy($_FILES[x][tmp_name],$_FILES[x][name])):0):0; ?>

     

    Конечно, интерпретатора php может не оказаться, тогда такой скрипт придется писать на каком нибудь там perl или еще чём-то.



Как распаковать архив на сервере

Второй этап - распаковка архива.

Путь распаковки архива неотделим от пути его запаковки. Фактически, это две стороны одной медали, это инь и янь, дополняющие друг друга. Если хорошо поразмыслить над этим, рождаются классические задачи дзен, вроде "запакованного архиватора". Вообще, можно долго размышлять над процессами упаковки и распаковки а также тестировать алгоритмы, для этого рекомендую отличную статью про архиваторы.



  • Если на сервере есть доступ к командной строке, то можно воспользоваться GNU утилитами для распаковки, например для архива, запакованного gzip:

     

    tar xvzf archive.tar.gz

     

    Чтобы запаковать такой архив в windows можно использовать минимальный пакет unix-программ, называющийся MSYS. Запаковывать можно командой:

     

    tar cvzf archive.tar.gz dir_to_upload

     

    Но алгоритм zip оставляет желать лучшего, единственное преимущество его в том, что он есть на всех серверах без исключения. Лучше паковать c помощью bzip2 или lzma:

     

    tar cvjf archive.tar.bz2 dir_to_upload
    tar -c -v --lzma -f archive.tar.lzma dir_to_upload

     

    Распаковывать такое соответственно можно так:

     

    tar xvjf archive.tar.bz2
    tar -x -v --lzma -f archive.tar.lzma

     

    Удостовериться в наличии нужных алгоритмов на сервере можно командой tar --help



  • Иногда выполнять команды на сервере запрещено, тогда можно воспользоваться специальным скриптом-распаковщиком PHP Unzipper v1.1 от Rinalds Uzkalns. Скрипт выполняет все сам, не используя модули PHP, то есть работать он будет везде. Официальный сайт автора похоже в стране вечного аптайма, поэтому я выложу скрипт здесь, причем в запакованном виде.



  • Бывают случаи, когда удается переносить архив на сервер только по частям. В таком случае помогут команды создания и распаковки многотомного архива в linux (в убогой freebsd надо по-другому):

     

    tar -cvj * | split -b 1m - arch.
    cat arch.* | tar -vjx

     

Обновлено 22.06.2010 13:54
 

Добавить комментарий


Защитный код
Обновить

 
Copyright (c) 2009 Codesex. Незаконное копирование будет анально наказано