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

3 марта 2007 г.

Если Вам приходится достаточно часто копировать на FTP-сервер скрипты, содержащие большое количество файлов (например, системы управления сайтом, блоги), то можно применить гораздо более удобный способ их закачки – первоначально упаковать в ZIP архив и в последствии распаковать прямо на сервере.

Согласитесь, что процесс закачки проходит значительно быстрее, если заливаешь всего один файл, нежели все файлы по отдельности, при условии одинакового размера в том и другом случае. Когда закачивается туча файлов, происходит множественное обращение FTP-клиента к серверу после каждого файла, на что уходит определенное время.

Более того, например, при использовании SOCKS или прокси, во время закачки множества маленьких файлов может произойти разрыв соединения с FTP-сервером (именно так у меня часто случается при коннекте через SOCKS), а это сулит еще большее количество потраченного времени, чего не случается, когда заливаешь всего один файл.

При частом повторении одних и тех же действий любой стремится упростить выполняемую задачу. Поэтому я, недавно столкнувшись с необходимостью частой установки движка WordPress, стал искать более простой и удобный способ его закачки на FTP-сервер.

Раздобыл полезную тулзу, называется PHP Unzipper – скрипт, который за считанные секунды распакует закачанный на сервер zip архив. Вот его предназначение:

  • Незаменимый инструмент для веб-мастера, которому часто приходится закачивать на сайт много файлов и папок.
  • Позволяет значительно сэкономить время и трафик (архив занимает гораздо меньший размер, кроме того при закачке большого количества файлов, исходящий трафик создает значительно большую долю входящего трафика, как раз за счет частого обращения к серверу) – достаточно закачать архив и скрипт распакует его мгновенно.
  • Дополнительной функцией тулзы является возможность просмотра структуры директорий на сайте, а также возможность просмотра содержимого zip архивов на сервере без их распаковки.
  • Скрипт очень прост в установке, использует авторизацию по логину и паролю.

PHP Unzipper

Загрузок: 5567 | Размер: 38 Кб

Как устанавливается:

  1. Закидываем находящиеся в архиве файлы index.php и pclzip.lib.php на сервер в ту папку, куда будем устанавливать движок (возможно потребуется переименовать index.php в любой другой, поскольку закачиваемый скрипт движка может иметь файл с таким же названием).
  2. Устанавливаем CHMOD для файла index.php на 777 (примечание - не знаю, почему, но в инструкции к скрипту написано именно так, а практика показала, что 777 нужно ставить для папки, в которую будет распаковываться архив).
  3. Открываем index.php в браузере, скрипт попросит зарегистрироваться – указываем логин и пароль (если после регистрации снова появилась эта же форма, устанавливаем для папки, в которую закачан PHP Unzipper, CHMOD на 777).
  4. Авторизуемся для работы с zip архивом.

При архивировании скрипта движка прошу обратить внимание на тот момент, что архивировать нужно не саму папку, в которой лежит этот скрипт, а то, что в ней находится, поскольку в каком виде вы запакуете движок, в таком виде его и разархивирует PHP Unzipper.

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

В таком случае нужно установить им права доступа PHP-средствами.

Для смены CHMOD файлам и папкам следует запустить php-файл со следующим кодом:

1
2
3
4
5
6
<?
chmod ("file1.php", 0666);
chmod ("file2.php", 0666);
chmod ("directory1", 0777);
chmod ("directory2", 0777);
?>

что устанавливает права доступа 666 к файлам file1.php и file2.php и права доступа 777 папкам directory1 и directory2.

Нашел также варианты PHP-кода для смены чмода сразу всем вложенным файлам и папкам, но, к сожалению, ни один не сработал. Поделитесь инфой, если знаете, как это делается.

Update 28.04.09: Сергей Предводителев предложил скрипт, который массово меняет права доступа - Рекурсивная смена прав доступа на PHP.

* * *

Студия “МастерВеб” специализируется на предоставлению услуг по размещению рекламы в Интернете (как медийной, так и контекстной) с целью привлечения целевой аудитории на продвигаемый сайт, и, как следствие, увеличения продаж товаров и услугу.

Теги: , , автор: Dimox | рубрика Веб-мастеринг

Комментарии (52): »

  1. Не работаеть :((
    пишет
    Parse error: syntax error, unexpected $end in /home/unasr/public_html/unzip/pclzip.lib.php on line 3551

  2. Хм, не знаю, почему так, у меня нет этой ошибки, все работает нормально.

  3. а какие использовать логи и пароль, использовал те что использую для входа ч/з фтп но вылетает это:
    Warning: fopen(pass.php) [function.fopen]: failed to open stream: Permission denied in /home/temanarodru/domains/tema.narod.ru/public_html/index.php on line 163

    Warning: fputs(): supplied argument is not a valid stream resource in /home/temanarodru/domains/tema.narod.ru/public_html/index.php on line 164

    Warning: fclose(): supplied argument is not a valid stream resource in /home/temaorkz/domains/tema.or.kz/public_html/index.php on line 165
    Registration succeeded!

    @
  4. Да нет же :). Данные от ФТП здесь абсолютно ни при чем.

    Когда первый раз запускаете скрипт, то нужно не авторизоваться, а как раз задать логин и пароль, которые вам нужны, а только после этого вводите указанные данные.

    Судя по ошибкам, я так понял, на фтп-сервере не создался файл, в котором должны были записаться логин/пароль. Дайте папке, в которую выложен скрипт, права 777.

  5. 777 я выставлял.
    а какие мне нужны логин и пароль?

    @
  6. Логин и пароль - любые, по вашему желанию!
    Я же написал об этом выше, читайте внимательнее.

  7. Фигасе, а субдиректории то не распаковывает. (

  8. Phoroshop, это значит, что у папки, в которую распаковываете, не достаточно прав на запись. Нужно поставить ей 777.

  9. Все классно работает! огромное спасибо!
    были траблы сначала, выставил public_html права 777 и все заработало.
    файлы и папки с совпадающими именами он не перезаписывает, выдает ошибку, поэтому надо удалять их или переименовать .

  10. Пожалуйста, Александр. Рад, что помог.

  11. Spasibo ogromnoe! Ochen pomagaet.

  12. спасибо огромное за сэкономленное время

  13. Здравствуйте! спасибо огромное за программу! я давно такую искал… но не видел…а искал потому что у меня щас очень слабый инет… жпрс… ещё раз благодарю!

  14. Anar, ninJo, alexman, всем пожалуйста! ;)

  15. Здравствуйте,
    можете рассказать подробнее 4 пункт.
    У меня после регистрации скрипт выдал такую надпись:

    Invalid path: /domains/ludmila.bladeapex.ru/public_html/<, Paths must also begin with a forward slash (/)
    Для копирования/перемещения файлов через буфер обмена, добавьте исходные файлы в буфер с помощью кнопки
    “Добавить в Буфер”, перейдите в папку, в которую вы хотите скопировать/переместить файлы и нажмите “Копировать Буфер”
    или “Переместить Буфер”

    Сама я не смогла понять, что я сделала не так. И что делать дальше.
    Буду очень благодарна за помощь.

  16. ludmila, авторизация - это ввод логина и пароля, который вы создаете в 3-м пункте.

    По ошибке, к сожалению, ничего подсказать не могу, т.к. не разбираюсь в этом. С такой ошибкой не встречался.

  17. Спасибо работает прекрасно!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!:)

  18. Дельный скрипт, стырим себе прозапас :)

  19. Спасибо! Скрипт работает на ура.

  20. Отличный скрипт кучу времени с экономил. Спасибо огромное!!!

  21. Прекрасный скрипт. Отмечу, что тот-же механизм действует и для разархивирования любых .zip. Просто файлы index.php и pclzip.lib.php копируются в папку с архивом. После чего меняется атрибут папки, а далее по тексту.
    За скрипт особая благодарность.)))))

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

  23. А нет ли скрипта для упаковки (архивирования сайта) для последующей закачки по ФТП на локалку?

  24. Да, замечательный скрипт. А тот что упаковывает есть?

    @
  25. Отличная прога! Поюзаю, Как раз то , что нужно.

  26. для того чтобы сразу на все распакованные файлы из архива выставить права надо поправить код распаковки там надо добавить PCLZIP_OPT_SET_CHMOD, 0777 (читать здесь http://php.russofile.ru/ru/authors/unsort/zip/)

    А скрипт этот - просто заморочка под pclzip.lib.php, можете и сами написать )

  27. Спасибо. Супер идея! Работает на ура.

  28. Спасибо за скрипт! :)

    При использовании столкнулся-таки с проблемой смены прав доступа.

    Вот написал скриптик для рекурсивной смены прав доступа на файлы и папки:
    http://predvoditelev.ru/page/php_recursion_chmod

    @
  29. И тебе спасибо. Твой скрипт - то, что мне было нужно давно. Добавлю информацию в статью.

  30. 30
    Konstantin
    Konstantin

    Спасибо, отличные скрипты, много времени сэкономил :)

  31. 31
    Сергей
    Сергей

    Спасибо, прекрасно работает, даже права не ставил.

  32. 32
    Полная Жопа
    Полная Жопа

    Что за день такой, неработает PHP Unzipper, папки создались но они пустые файлов вних нет после распаковки. Также нельзя не у одного файла которые в главной папки сменить права.

  33. Я нашел в инете, что файлы становятся заблокированными, т.к они создаются от имени сервера.
    А что если сменить владельца рекурсивно для всех файлов. Нашел в php функции:
    int chgrp (string filename, mixed group); Функция пытается сменить группу-владельца данного файла.
    int chown (string filename, mixed user); Функция chown пытается сменить владельца файла.
    Только я не знаю как указать владельца, если сайт у кого то на хостинге лежит, как указать что я владелец файлов.

  34. Спасибо! То что искал!
    А то надоело по одной папке кидать на FTP’ник :(

    @
  35. Такая же ситуация!
    Начинается распаковка архива, создаются каталоги которые имеются в архиве, а файлы в эти каталоги не распаковываются.
    Как изменить скрипт чтобы разрешить эту проблему?

    @
  36. Возможно, что проблема связана с каким-то настройками хостинга. Я не автор скрипта, поэтому ничем конкретным помочь не могу.

  37. А во тут - http://lazutov.ru/8-besplatnyx-ajaxphp-fajlovyx-menedzherov/ - есть список “8 бесплатных Ajax/php файловых менеджеров”. Некоторые из них, как пишут, тоже умеют с архивами работать. Правда сам еще не проверял.

    @
  38. м-м-м да , действительно , молодцы !!!
    удобно , классно придумали ))), круто , вот это действительно полезный скрипт !!!
    Надо мне будет подумать - как flex-овый интерфейс прикрутить

    @
  39. все работает блин я раньше мучался с заливкой дорвеей теперь не каких обрывов нет пакую в зип и лью

  40. Dimox, непойму как работает
    в index.php пишу логин и пароль для регистрации -> пишет что регистрация умпешна и сслыка на авторизацию -> нажимаю и перехожу опять на поля для регистрации.
    Как нормально залогиниться?

    @
  41. На папку, в которой лежит скрипт, поставил права 777? После регистрации там же должен появиться файл pass.php.

  42. Ой спасибо за скрипт, давно искал подобный ато замучился заливать так. Сейчас буду тестить

  43. Nic.Как решил свою проблему?Если не решил то помогите кто знает что делать в данном случае?
    Warning: fopen(pass.php) [function.fopen]: failed to open stream: Permission denied in /home/temanarodru/domains/tema.narod.ru/public_html/index.php on line 163

    Warning: fputs(): supplied argument is not a valid stream resource in /home/temanarodru/domains/tema.narod.ru/public_html/index.php on line 164

    Warning: fclose(): supplied argument is not a valid stream resource in /home/temaorkz/domains/tema.or.kz/public_html/index.php on line 165
    Registration succeeded!
    Вот Указанные строки
    163 $fn = fopen(’pass.php’,'w’);
    164 fputs($fn, ‘\n”);
    165fclose($fn);
    что в них менять надо?Заранее признателен за помощь!

    @
  44. а у меня выдает вот такое сообщение
    Abort pclzip.lib.php : Missing zlib extensions
    может кто подскажет

    @
  45. Скорее всего, на хостинге не настроено расширение zlib.

  46. спасибо за быстрый ответ
    и в принципе логичное объяснение :)

    @
  47. А как быть с моей проблемой выше?(((

    @
  48. Может быть у папки со скриптом не достаточно прав доступа (нужно 777).

  49. Да ставил я 777 на все папки и файлы

    @
  50. Евгений, строка - fopen(pass.php) [function.fopen]: failed to open stream, означает что не удалось открыть файл pass.php который должен создаться при первом запуске скрипта и регистрации в нем.
    Строка 163 $fn = fopen(’pass.php’,’w’); означает - создаем файл pass.php если его не существовало ранее или перезаписываем, если он уже был создан. Попробуйте заранее создать файл pass.php и поставить права на запись, 777 - означает: владелец, группа, остальные - чтение, выполнение и запись

Присоединяйтесь к обсуждению!

Отправляя кoммeнтapий, Вы автоматически принимаете правила кoммeнтиpoвaния на этом блоге.

Правила кoммeнтиpoвaния на блоге dimox.name:

  1. Первый кoммeнтapий всегда проходит премодерацию.
  2. В поле "URL блога" можно указывать только ссылку на главную страницу вашего блога. Ссылки на прочие веб-ресурсы (в том числе блоги/сплоги, созданные не для людей) будут удалены.
  3. Запрещается использовать в качестве имени комментатора слоганы/названия сайтов, рекламные фразы, ключевые и т.п. слова. В случае несоблюдения этого условия имя изменяется по усмотрению владельца блога. Просьба указывать нормальное имя или ник.
  4. Весьма вероятно, что короткий и неинформативный кoммeнтapий вида "Спасибо!", "Интересная статья", будет удален. Исключение составляют знакомые автору блога комментаторы.

Подписаться, не комментируя

Предыдущие из рубрики