W pracy nad stroną internetową bardzo często zachodzi potrzeba, aby skopiować wszystkie pliki – w szczególności gdy wprowadzamy zmiany na już działającym serwisie.
W jakim celu najczęściej kopiujemy cały serwis?
- Chcemy utworzyć kopię roboczą, by testować na niej większe zmiany.
- Chcemy mieć podręczną kopię zapasową.
- Chcemy przenieść stronę na inny serwer (np. przy zmianie dostawcy hostingowego).
W dalszym ciągu bardzo częstym sposobem wymiany plików ze zdalną maszyną jest protokół FTP (niezmiennie od lat 80-tych). FTP nie ma żadnych ograniczeń jeśli chodzi o prędkość przesyłu danych i pracuje z maksymalną prędkością na jaką pozwalają łącza komunikacyjne między obiema maszynami. #wiemyjak
Kopiowanie zaczyna być problematyczne dopiero wtedy gdy przyjdzie nam skopiować dużo nawet bardzo niewielkich plików. Najwięcej czasu pochłania wówczas „rozmowa” serwera z klientem – czyli wymiana poleceń i komunikatów do obsługi transakcji.
Czasami skopiowanie serwisu jest niemożliwe, ponieważ zbudowany jest z dziesiątek tysięcy małych plików i transmisja wszystkich po kolei trwałaby niemiarodajnie długo.
Jeśli masz dostęp do powłoki tekstowej serwera
W wypadku dostępu do serwera przez powłokę tekstową (połączenie SSH) możemy bardzo szybko i sprawnie zaradzić temu problemowi.
- Przejdź do katalogu, w którym znajduje się strona (tzw. document root)
$ cd ścieżka/do/katalogu
- Spakuj wszystkie pliki do archiwum tar i umieść je o jeden katalog wyżej
$ tar -cf ../kopia-strony.tar .
Jeśli chcemy aby archiwum było skompresowane (będzie wtedy zajmowało mniej przestrzeni), możemy dodać parametr „j”, który sprawi, że docelowy plik będzie miał kompresję bzip2. Warto mieć na uwadze, że tworzenie skompresowanego archiwum dłużej trwa
$ tar -cjf ../kopia-strony.tar.bz2 .
Mając taki plik możemy w dowolny sposób przesłać go na inną maszynę.
#wiemyjak prowadzić skuteczną strategię SEO i SXO
POZNAJ naszą ofertę na POZYCJONOWANIE
Jeśli nie masz dostępu do powłoki tekstowej
Uwaga: ta część poradnika działa tylko gdy na serwerze wykorzystywany jest język PHP w klasycznej formie – czyli możemy wykonać plik ze skryptem wpisując jego nazwę w pasku adresu przeglądarki internetowej. Ponadto – w wypadku takiego problemu zawsze warto spróbować. Nie ma jednak gwarancji, że operacja się powiedzie. Niektóre serwery w ramach zabezpieczeń mają wyłączoną tą funkcjonalność lub program antywirusowy, który na nim jest nie pozwala na przesłanie pliku.
W tym przypadku można dokonać tego w dokładnie taki sam sposób jak powyżej, ale wykonując polecenie za pośrednictwem skryptu PHP. Nie zawsze konfiguracja w php.ini na to pozwala, co jest zrozumiałe, ponieważ gdyby wirus uzyskał dostęp do edycji plików PHP, to otrzymuje również kontrolę nad poleceniami systemowymi.
- Utwórz plik w głównym katalogu strony (document root) i nazwij go, np. pack.php
<?php isset($_GET['jakis-ciag-znakow']) or die(); if (TRUE) shell_exec('tar -cf archiwum-strony.tar .');
Objaśnijmy powyższy przykład. W pierwszej linijce sprawdzamy czy istnieje parametr zapytania GET o losowej treści. Uniemożliwi to wykonanie skryptu przez niepożądane osoby.
Druga linijka wydawać się może pozbawiona sensu. Znalazła się tam, ponieważ niektóre antywirusy, które mogą być zainstalowane na serwerach, wykrywają bezpośrednie wywołanie shell_exec jako potencjalne zagrożenie. Dodanie warunku i umieszczenie shell_exec w bloku rozwiązuje ten problem.
W trzeciej linijce ostatecznie wykonujemy polecenie, które pakuje stronę do archiwum.
- Zostało już tylko wywołanie skryptu. W przeglądarce internetowej wpisujemy adres: http://domena.com/pack.php?losowy-ciag-znakow (ten z pierwszej linijki)Strona powinna się długo ładować – do momentu utworzenia archiwum. Jeśli serwer zgłosi błąd 'Upłynął czas oczekiwania’ – to nic. Nie powinno to przerwać procesu tar.
UWAGA: Tak zrobiony plik jest dostępny do pobrania z dowolnego miejsca. Nie znając jego nazwy nikt go oczywiście nie pobierze, ale należy ZAWSZE PAMIĘTAĆ by usunąć go z serwera po pobraniu. Polecam też ustawienie bardziej skomplikowanej nazwy pliku.
Czasami nie chcemy przerzucać wszystkiego. Można pominąć pliki lub katalogi dodając kolejne parametry –exclude=’NAZWA_PLIKU_LUB_FOLDERU’, np.
$ tar -cjf paczka.tar.bz2 . --exclude=cache --exclude=backups
Ja używam FileZilli. Dla mnie jest najprostsza i najwygodniejsza, a gdy chcę coś szybko podejrzeć to bezpośrednio w DirectAdmin wchodzę w pliki serwerowe :)