Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!

cURL cz. 2: Protokół FTP

Nawiązywanie połączenia i poruszanie się po katalogach

Oczywistym jest, że przed rozpoczęciem korzystania z zasobów serwera, należy ustanowić z nim połączenie, przez które będziemy wysyłali komunikaty. Powinniśmy zatem wywołać funkcję inicjalizującą nową sesję cURL. Przykładowe wywołanie będzie wyglądało następująco:

$ch = curl_init('ftp://login:haslo@example.com:port');
curl_exec($ch);
curl_close($ch);

Można zrobić to, oczywiście, w inny sposób. Tym razem wykorzystując opcje transferu:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'ftp://example.com');
curl_setopt($ch, CURLOPT_USERPWD, 'login:haslo');
curl_setopt($ch, CURLOPT_PORT, port);
curl_exec($ch);
curl_close($ch);

Tak jak w pierwszym przykładzie, wszystkie dane można było zawrzeć w URL-u, ale chciałem zwrócić uwagę na możliwość ustawiania parametrów połączenia poprzez opcje.

Po wywołaniu kodu na wyjściu powinny pojawić się dane podobne do zamieszczonych w poniższym listingu:

Spis może wydawać się znany dla użytkowników Linuxa, gdyż większość serwerów FTP zwraca indeks w postaci wyjścia polecenia ls -l. Od lewej otrzymujemy: tryb pliku, ilość powiązań, nazwę bądź id posiadacza i jego grupy, datę modyfikacji oraz samą nazwę. Zapis ten nie jest jednak standardem, więc teoretycznie nie powinniśmy polegać na nim. Praktyka pokazuje jednak, że większość serwerów implementuje ten format.

Drugim wariantem wyświetlenia listy jest zwrócenie wyłącznie spisu nazw. Minusem tego rozwiązania jest utrata wszelkich informacji z wyjątkiem nazwy elementu. Nie dowiemy się nawet, czy mamy do czynienia z plikiem, czy z katalogiem. Jeżeli, mimo wszystko, chcemy poprosić serwer o taki indeks, ustawiamy wartość opcji CURLOPT_FTPLISTONLY na true. Pojawia się kolejny problem - nie wszystkie serwery wysyłają całą zawartość katalogu. Niektóre z nich pomijają podkatalogi czy symlinki, co może być często mylące. Jednak sytuacja jest podobna do pełnego wylistowania - większość popularnych serwerów działa prawidłowo i przeważnie możemy im zaufać.

$ch = curl_init('ftp://login:haslo@localhost');
curl_setopt($ch, CURLOPT_FTPLISTONLY, true);
curl_exec($ch);
curl_close($ch);

Co z logowaniem jako użytkownik anonimowy? Nie ma problemu -; wystarczy usunąć wszystkie informacje o loginie i haśle, co spowoduje, że cURL spróbuje połączyć się anonimowo. Możemy również zamiast loginu podać mail w stylu anonymous@example.com.

Warto wspomnieć, że cURL automatycznie pod koniec skryptu zrywa połączenie, ale w momencie, w którym nie będzie nam już potrzebny uchwyt, lepiej abyśmy zamknęli go ręcznie.

Poruszanie się po katalogach to nic innego, jak wywołanie żądania z innym URL. Po nawiązaniu połączenia powinniśmy korzystać z opcji CURLOPT_URL, aby podać bibliotece nową ścieżkę. Należy jednak pamiętać, że musi być ona bezwzględna, czyli zawierać również adres do serwera. Istnieje inna możliwość przemieszczania się, lecz o niej dowiesz się później.

Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (4)
Kolejność
Czwartek 20 Wrzesień 2007 8:03:24 pm - Ludvik

Możesz tak zrobić, ale w tym przypadku nie będzie miało to wpływu na działanie. Jak pobierasz jeden plik, to będzie to wyglądało logiczniej, ale przy pobieraniu kilku nie ma sensu czekać do zakończenia połączenia, blokując plik, który nie jest używany.

Temat
Czwartek 20 Wrzesień 2007 6:44:26 pm - sedziwoj

Coś jest nie tak z przechodzeniem po krokach. (to tak tylko przy okazji)
Tak się zastanawiam czemu masz kolejność:
1)utworzenie uchwytu pliku
2)inicjalizacja cURL
3)wykonanie cURL
4)zamknięcie pliku
5)zamknięcie cURL
Czy nie lepiej zamienić 4 z 5?

Postaram się to poprawić
Sobota 15 Wrzesień 2007 3:38:04 pm - Ludvik

Ale będę mógł to zrobić dopiero, jak skończę część trzecią :) Dzięki za uwagę.

Artykuł bardzo przydatny
Czwartek 06 Wrzesień 2007 10:50:19 am - trax <admin_smc_at_o2.pl>

Jeden szkopuł: Należy się małe wyjaśnienie co do listingu 3.1 . Treść listingu jest w porządku, ale tekst objaśniający jest miejscami niejednoznaczny i coś tam się nie zgadza,

Suma sumarum: artykuł bardzo przydatny

Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2022 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System