2011-01-14 16 views
58

Natknąłem się na wiele skryptów PHP dla internetowych klientów FTP. Muszę zaimplementować klienta SFTP jako aplikację internetową w PHP. Czy PHP obsługuje SFTP? Nie mogłem znaleźć próbek. Czy ktoś może mi w tym pomóc?Jak SFTP z PHP?

Odpowiedz

57

PHP ma owijacze strumienia ssh2 (domyślnie wyłączone), więc możesz używać połączeń sftp z dowolną funkcją obsługującą obwoluty strumieniowe za pomocą protokołu ssh2.sftp:// dla protokołu, np.

file_get_contents('ssh2.sftp://user:[email protected]:22/path/to/filename'); 

lub - gdy również używając ssh2 extension

$connection = ssh2_connect('shell.example.com', 22); 
ssh2_auth_password($connection, 'username', 'password'); 
$sftp = ssh2_sftp($connection); 
$stream = fopen("ssh2.sftp://$sftp/path/to/file", 'r'); 

Zobacz http://php.net/manual/en/wrappers.ssh2.php

Na marginesie, jest też dość grono pytań dotyczących tego tematu już:

+0

zarówno file_get_contents, jak i file_put_contents działają świetnie. nigdy nie wiedziałem, że pracują z sftp i jest to o wiele łatwiejsze niż używanie wbudowanych rzeczy sftp. Dzięki! – jbrahy

+0

Nawet jeśli używasz file_get_contents(), nadal potrzebujesz rozszerzenia ssh2 (afaik). – StanE

31

Funkcje ssh2 nie są bardzo dobre. Trudne w użyciu i trudniejsze do zainstalowania, używanie ich gwarantuje, że twój kod ma zerową przenośność. Moje zalecenie byłoby użyć phpseclib, a pure PHP SFTP implementation.

+0

obsługuje tylko SFTP v3 – Blacksonic

+0

@indranama czy oznaczyłbyś to jako poprawną odpowiedź, aby przyszli użytkownicy nie musieli czytać komentarzy, aby znaleźć najlepsze rozwiązanie? –

0

Wykonałem pełne wykupienie i napisałem klasę, która tworzy plik wsadowy, a następnie wywołuje sftp poprzez wywołanie system. Nie jest to najładniejszy (lub najszybszy) sposób, ale działa na to, czego potrzebuję i nie wymagał instalacji dodatkowych bibliotek ani rozszerzeń w PHP.

może być droga, jeśli nie chcesz korzystać z ssh2 rozszerzeń

+0

powiązany wątek, który pomógł mi: https://groups.google.com/forum/#!topic/comp.security.ssh/_55TdDdUTCw – Quamis

22

I stwierdził, że „phpseclib” powinno pomóc w tym (SFTP i wiele innych funkcji). http://phpseclib.sourceforge.net/

umieścić plik na serwerze, po prostu zadzwoń (przykład kod z http://phpseclib.sourceforge.net/sftp/examples.html#put)

<?php 
include('Net/SFTP.php'); 

$sftp = new Net_SFTP('www.domain.tld'); 
if (!$sftp->login('username', 'password')) { 
    exit('Login Failed'); 
} 

// puts a three-byte file named filename.remote on the SFTP server 
$sftp->put('filename.remote', 'xxx'); 
// puts an x-byte file named filename.remote on the SFTP server, 
// where x is the size of filename.local 
$sftp->put('filename.remote', 'filename.local', NET_SFTP_LOCAL_FILE); 
+0

repozytorium git jest tutaj: https://github.com/phpseclib/phpseclib/tree/master/phpseclib – relipse

-1

Monsta FTP oferuje SFTP/SCP, jak również zwykły FTP za pośrednictwem klienta internetowego, który można pobrać bezpłatnie. (zrzeczenie się: jestem zaangażowany w ten projekt)

+0

jak to się dzieje? czy Monsta jest biblioteką PHP do użytku deweloperów? – Brian