devblog, portfolio

movie producer, zend framework, php, jquery pluginy



PHP: Otwieranie zdalnych plików

Każdy z Was na pewno korzystał kiedyś z funkcji fopen w php. Zazwyczaj korzystamy z niej, aby otworzyć pliki znajdujące się na tym samym serwerze, na którym uruchamiamy skrypt. Co zrobić, gdy chcemy otworzyć zdalny plik? Korzystanie z protokołu http nie jest tutaj dobry rozwiązaniem. Niektórych plików nie można przezeń otworzyć, a na pewno nie poradzi sobie z tym protokołem funkcja filesize, służąca do określania rozamiaru pliku. Skorzystamy więc z protokołu ftp!

Protokół ftp

Jest on znany wszystkim osobom mającym styczność ze stronami internetowymi. Oferuje możliwość zalogowania się na konto na serwerze i uzyskania pełnego dostępu do plików znajdujących się na tymże serwerze. Jak otworzyć plik korzystając z połączenia ftp? Wcale nie musimy korzystać z całego zestawu funkcji dostępnych w języki php zaczynających się od ftp_. Wystarczy nam funkcja fopen i ew. filesize (jeśli zamierzamy udostępnić plik do pobrania).

Wszystkie dane potrzebne do połączenia zawrzemy w adresie, który przekażemy funkcji fopen jako parametr. Adres taki ma następującą składnię:

ftp://użytkownik:hasło@host:port/ścieżka

Np. jeśli potrzebujemy połączyć się z hostem kacperkolodziej.com na porcie 43, a do zalogowania użyjem użytkownika kacper i hasła password, to nasz adres url będzie wygladał tak:

ftp://kacper:password@kacperkolodziej.com:43/

Oczywiście musimy jeszcze podać ścieżkę do pliku. Załóżmy, że w katalogu files na serwerze mamy plik dane.txt. Aby go otworzyć wpisujemy następującą ścieżkę:

ftp://kacper:password@kacperkolodziej.com:43/files/dane.txt

I już. Takiego adresu możemy użyć jako parametr zarówno funkcji fopen jak i filesize i wszystkich innych służących do obsługi plików.

Skrypt downloadu

Na koniec prezentuję mały skrypt służący do downloadu ze zdalnego serwera. Kod w listingDump.

Za pomocą funkcji fassthru przekazujemy całą zawartość pliku do przeglądarki. Odpowiednio ustawione nagłówki pozwalają na poinformowanie przeglądarki jaki jest to typ pliku, jaki ma rozmiar i co najistotniejsze w tym skrypcie, pod jaką nazwą ma być wysłany plik do użytkownika. To jest właśnie jedna z przewag takiego rozwiążania, zamiast przekierowywania użytkownika funkcją header do pliku. Drugą z zalet jest to, że w tym skrypcie możemy "nakazać" poinformowanie nas o pobraniu pliku.

Dodaj komentarz »