Home > Programowanie, Webmastering > Kopiowanie pliku między serwerami w PHP

Kopiowanie pliku między serwerami w PHP

Swego czasu, gdy publikowałem jeden ze swoich projektów, w celu odciążenia serwera głównego (limit transferu) wysyłałem plik jeszcze na kilka innych. Jako iż jego rozmiar osiągał 30MB, a łącze jakim dysponowałem nie było demonem prędkości, powstał problem – jak przyspieszyć ten proces?

W tym momencie natknąłem się na możliwość kopiowania plików między serwerami przy pomocy skryptu PHP. Serwery dostawców usług hostingowych są wyposażone w bardzo szybkie łącza (z reguły), a co za tym idzie, ściągnięcie pliku z innej lokalizacji trwa sekundy zamiast długich minut jakie ja poświęcałem na wrzucenie pliku na każdy FTP z osobna.

Wszystko co musimy zrobić to napisać prosty skrypt PHP i umieścić go w lokalizacji docelowej – a ten, wykona za nas cała czarną robotę.

Właściwie wpis ten ogranicza się do jeden komendy w języku PHP: copy. To za jej pomocą możliwe jest kopiowanie plików. Ale to co nas interesuje to fakt, że plik źródłowy nie musi znajdować się na lokalnym serwerze. Składnia polecenia wygląda następująco:

bool copy ( string $source , string $dest [, resource $context ] )

Pierwszym parametrem jest plik źródłowy, drugim docelowy, a sama funkcja zwraca wartość PRAWDA/FAŁSZ, mówiąca nam o tym czy operacja kopiowania się udała. Przykładowo:

copy('http://downloads.sourceforge.net/sevenzip/7z465.exe', '7z465.exe');

W wyniku otrzymamy pobrany plik 7z465.exe do folderu bieżącego (tego w którym znajduje się sam skrypt PHP).

I to w zasadzie wszystko. Czy opłaca się bawić w takie rozwiązania? W moim przypadku, czyli dla serwera na którym stoi ten blog, kopiowanie plików z innego serwera odbywa się z średnią prędkością 60mbps! W stosunku do moich marnych 512kbps upload’u jest to kolosalna różnica i oszczędność czasu. Oczywiście wszystko zależy od łącza naszego serwera i docelowego, nie mniej w większości przypadków, są to prędkości przewyższające te jakie oferują nam dostawcy internetu (w akceptowalnych cenach :) ).

Na sam koniec, udostępniam prosty skrypt PHP, który umożliwia wygodne wykorzystanie funkcji copy – zawiera formularz oraz wyświetla statystyki po zakończeniu kopiowania.

  1. piotrknysz
    25 stycznia 2010 at 13:06 | #1

    Rozwiązanie proste, choć ma spore ograniczenia. Dla małych projektów sprawdzi się w przypadku większych plików może być spory problem. Dużo również zależy od administratora serwera czy pozwoli na wykonanie takiej operacji. Dodatkowo należało by zadbać o uprawnienia kopiowanego pliku.

  2. 28 stycznia 2010 at 10:59 | #2

    Bardzo dobry poranik, oszczędność czasu. na home.pl miałem 76 mb/s :o

  3. Raafiik
    10 maja 2010 at 07:37 | #3

    Witam,
    ale ten skrypt nie umożliwia kopiowania plików z serwera na, którym jest uruchomiony właśnie ten skrypt php, na inny serwer. Czy w php można coś takiego wykonać? Jeśli ktoś ma jakąś poradę chętnie przetestuje. A może połączenie z ftp, a następnie kopiowanie własnie docelowo tam.

  4. 10 maja 2010 at 09:58 | #4

    Ten skrypt pozwala na kopiowanie DO serwera na którym jest skrypt. To o czym mówisz faktycznie należało by zrealizować sesją FTP.

  5. Raafiik
    10 maja 2010 at 10:13 | #5

    Może masz jakiś link albo gotowca, nie mam pojęcia jak to zrobić.

  6. Raafiik
    10 maja 2010 at 12:10 | #6
  7. 10 maja 2010 at 12:19 | #7

    Przy opisie funkcji ftp_fput masz sporo przykładów:
    http://pl2.php.net/manual/en/function.ftp-fput.php

  1. Brak jeszcze trackbacków