Ostatnia aktualizacja:

3 września 2025

Opublikowano:

2 stycznia 2017

Połączenie z SFTP z poziomu PHP

Połączenie z SFTP z poziomu PHP

W dzisiejszym artykule chcę opisać jak rozwiązałem problem, który napotkałem przy jednym z zadań podczas pracy nad projektem. Część zadania, która sprawiła mi opisywany problem, była to komunikacja z serwerami Amazona. System, który wdrażaliśmy niestety nie posiadał API, jedynie wymianę plików EDI, poprzez wskazane przez Amazon serwery. Do wyboru mieliśmy AS2 (wszystko płatne, nie rozwiązujące problemu automatyzacji całości z poziomu PHP) oraz SFTP, które wybraliśmy.

W tym artykule dowiesz się:
  1. Czym jest SFTP?
  2. Jak używać PuTTY oraz PSFTP.exe?
  3. Wykonywanie w PHP

Czym jest SFTP?

FTP czyli File Transfer Protocol jest to protokół komunikacyjny, który umożliwia wymianę danych między serwerem a klientem, lecz niestety żadne dane nie są szyfrowane, co jest mało bezpieczną opcją. SFTP(ang. SSH File Transfer Protocol) wykorzystuje szyfrowanie kluczem szyfrującym. Wdrażałem to w systemie stworzonym na Symfony 2, próbowałem wykorzystać kilka metod ze „stacka” i innych stron, lecz niestety zero skutku. Tak o to stworzyłem krótki tutorial, jak rozwiązać taki problem.

Jak używać PuTTY oraz PSFTP.exe?

Bezpłatna aplikacja kliencka emulująca terminal tekstowy do łączenia się z serwerem wykorzystując między innymi protokoły SSH. Posiada bardzo prosty interfejs:

Interfejs Putty

Na pierwszej stronie definiujemy sesje. Wypełniając adres serwera oraz protokół – w naszym przypadku SSH. W Saved Sessions wpisujemy nazwę sesji naszego połączenia i dajemy Save (przy zmianie na innych kartach pamiętajcie, aby wrócić na kartę Session oraz zapisać ponownie zmiany – mało intuicyjne).

Logowanie Putty

Kolejnym interesującym nas elementem interfejsu jest Connection->Data. gdzie musimy wpisać login naszego konta klienta do serwera – nie jest to wymagane, można to wykonać później z poziomu PHP, ale może być wpisany również tutaj.

Konfiguracja Putty

Connection->SSH->Kex dodajemy „fingerprint” naszego klucza(nie wiem czy zawsze jest to wymagane, ale w moim przypadku bez tego nie dochodziło do pełnej autentykacji. Jeśli nie wiesz skąd wyciągnąć to ze swojego klucza zajrzyj tutaj. Natomiast w Connection->SSH->Auth podajemy ścieżke do naszego klucza prywatnego. W tym momencie zapisujemy sesję na karcie Sessions i PuTTy mamy w pełni skonfigurowane. W tym momencie musimy stworzyć zmienną środowiskową ‘psftp’ do pliku psftp.exe (zakładam że tego tłumaczyć nie trzeba ?)

SSH Putty

Wykonywanie w PHP

Klasa ta ma za zadanie wysłać od nas z konkretnej ścieżki web/files/ pliku o nazwie przekazanej jako argument do metody, do katalogu upload/ na zdalnym serwerze SFTP. Aby tego dokonać tworzymy tymczasowy plik .bat, w której umieszczamy rozkaz put web/files/nazwapliku.txt upload/nazwapliku.txt. Co spowoduje przekopiowanie pliku. Plik bat potrzebny jest nam do następnego kroku jakim jest wywołanie procesu: new Process(„psftp -load nazwa.sesji.putty -l login.do.serwera -b c:\project\web\nazwapliku.bat”). Zmienna środowiskowa otwiera konsolę psftp do łączenia się z określoną sesją zdefiniowaną w PuTTy za pomocą parametru -load, tutaj podajemy również login z parametrem -l, oraz nasz stworzony plik .bat który podczas wykonywania procesu wykona określoną instrukcję.

Przykładowy kod

Akurat w tym przypadku dalej robimy porządek z plikami, przenosimy wysłane do backup’u a plik .bat który jest już zbędny zostaje usunięty. Listę instrukcji do PSFTP które można zamieścić w pliku .bat znajdziecie tutaj . Rozwiązanie troszkę „naokoło” ale działa, co jest najważniejsze. Mam nadzieję, że ktoś, kto znajdzie się w opresji, znajdzie ukojenie dzięki temu krótkiemu artykułowi.

Ostatnia aktualizacja:

3 września 2025

Opublikowano:

2 stycznia 2017

W tym artykule dowiesz się:
  1. Czym jest SFTP?
  2. Jak używać PuTTY oraz PSFTP.exe?
  3. Wykonywanie w PHP

Polecane artykuły

Co możesz zyskać wdrażając e-commerce b2b - banner

Co możesz zyskać, wdrażając PIM?

Jeśli Twój katalog produktowy jest sporych rozmiarów, możesz mieć trudność z zapanowaniem nad tym, co się w nim dzieje. Im więcej produktów, ich wariantów i opcji konfiguracji tym większy chaos. Cały ten rozgardiasz można jednak ujarzmić za pomocą systemu PIM (ang. Product Information Management), czyli narzędzia do tworzenia, importowania, eksportowania, edycji i dystrybucji informacji produktowych. […]

Czytaj więcej
Magento Multistore - banner

Magento Multistore – funkcja, która pomoże rozwinąć Twój e-Commerce

Chcesz rozkręcić swój biznes, otworzyć nowy sklep lub zacząć sprzedawać za granicą? Funkcja Magento Multistore może Ci w tym pomóc. Nieważne, czy planujesz stworzenie 2, 5, czy 10 nowych witryn, czy chcesz zacząć sprzedaż na jednym, czy kilku nowych rynkach, skalowanie biznesu zawsze będzie stanowić wyzwanie. Nie musi być to jednak syzyfowa praca. Z odpowiednimi […]

Czytaj więcej
Dedykowany sklep internetowy? zastanów się jeszcze raz! - wideo

Dedykowany sklep internetowy? zastanów się jeszcze raz!

Wdrożenie dedykowanego sklepu internetowego? Z jednej strony spoko - nie musisz decydować się na półśrodki i wszystko będzie po Twojemu. W końcu jak inaczej budować przewagę konkurencyjną niż przez indywidualizm? Z drugiej strony czy aby na pewno jesteś tak inny niż wszyscy? Okazuje się, że niekoniecznie - wszystkie sklepy internetowe mają całkiem istotny wspólny mianownik, którego nie ma sensu za każdym razem dłubać od nowa. A jak dojdzie do tego ryzyko, że konflikt z dostawcą = zatrzymanie rozwoju sklepu, to robi się trochę niebezpiecznie. W tym nagraniu opowiem Ci, dlaczego ja bym się nie zdecydował na takie ryzyko.

Czytaj więcej
Less vs Sass

LESS vs Sass

„Który preprocesor CSS użyć?” to pytanie, które zadaje sobie każdy początkujący front-end developer. Nawet w X-Coding zdarzały się dyskusje o przewagach jednego nad drugim. To, co mnie cieszy, to fakt, że nikt już specjalnie nie kwestionuje, czy w ogóle używać preprocesora, a dyskusja zeszła na porównanie, którego użyć. Dzisiaj spróbujemy zmierzyć się z różnicami pomiędzy […]

Czytaj więcej

Skontaktuj się z nami

Opowiedz nam o swoich ambicjach związanych z e-commerce i pozwól nam wspólnie je zrealizować.

Skontaktuj się z nami