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

cURL cz. 2: Protokół FTP

Wykonywanie poleceń

Poza przeglądaniem katalogów i wymianą plików, FTP oferuje dodatkowe możliwości, z których nieraz chcielibyśmy skorzystać. Nie zostały one jednak zaimplementowane jako ustawienia transferu. Z pomocą przychodzą nam dwie opcje służące do bezpośredniego wywołania komend FTP: CURLOPT_QUOTE i CURLOPT_POSTQUOTE. Jako wartości przyjmują tablice z kolejnymi poleceniami do wykonania.

Kolejność wykonywania poleceń

Warto zdać sobie sprawę z tego, w którym momencie komendy zostaną wysłane przez cURL, gdyż nieznajomość tego zachowania może przysporzyć niemałych kłopotów. Najlepiej zilustruje to przykład.

$ch = curl_init('ftp://login:haslo@example.com/folder/');
curl_setopt($ch, CURLOPT_QUOTE, array('CWD katalog'));
curl_setopt($ch, CURLOPT_POSTQUOTE, array('CWD podkatalog'));
curl_exec($ch);
curl_close($ch);

Niektórych może zdziwić wynik działania powyższego kodu, lecz jest to zachowanie całkowicie poprawne. Wpierw cURL łączy się z serwerem FTP. Po nazwiązaniu połączenia wykonywane są polecenia przypisane do CURLOPT_QUOTE, czyli w tym przypadku zmiana folderu na 'katalog'. Następnie wykonywane są działania podjęte przez samą bibliotekę zostaje wysłane polecenie CWD folder. Jest to zachowanie dosyć niespodziewane, gdyż bardziej logicznym wynikiem byłoby wykonanie komendy CWD /folder. W tej chwili znajdujemy się w katalogu /katalog/folder/ na serwerze. Client URL Library wysyła polecenie wyświetlenia listy plików znajdujących się w obecnej gałęzi. Po otrzymaniu indeksu folderu /katalog/folder/ przechodzimy do poleceń przypisanych do CURLOPT_POSTQUOTE. Następuje zmiana folderu na /katalog/folder/podfolder/. Na liście nie ma komend do wykonania, więc biblioteka zamyka połączenie.

Przydatne polecenia

Dzięki możliwości wysyłania poleceń jesteśmy w stanie wykonywać dowolne działania na serwerze (o ile posiadamy do tego uprawnienia). Oto kilka najbardziej pożytecznych przykładów.

curl_setopt($ch, CURLOPT_QUOTE, array('CDUP'));
curl_setopt($ch, CURLOPT_QUOTE, array('RNFR stara_nazwa',
                                      'RNTO kat/nowa_nazwa'));
curl_setopt($ch, CURLOPT_QUOTE, array('DELE nazwa_pliku'));
curl_setopt($ch, CURLOPT_QUOTE, array('MKD kat/podkat'));
curl_setopt($ch, CURLOPT_QUOTE, array('RMD katalog'));

Przed usunięciem folderu należy upewnić się, czy jest on pusty, gdyż w przeciwnym wypadku polecenie zakończy się niepowodzeniem.

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-2024 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System