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.
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.
Bardzo dobry poranik, oszczędność czasu. na home.pl miałem 76 mb/s
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.
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.
Może masz jakiś link albo gotowca, nie mam pojęcia jak to zrobić.
Tutaj dla zainteresowanych, przetestuje: http://www.computerworld.com.au/article/192014/using_ftp_php_scripts/?fp=2&fpid=76768
Przy opisie funkcji ftp_fput masz sporo przykładów:
http://pl2.php.net/manual/en/function.ftp-fput.php