2015-05-28 7 views
8

Ho installato Apache sulla mia macchina in modo da poter usare localhost come server PHP. Che funzioni. In questo momento sto cercando di utilizzare PHP per inviare file tramite SFTP su un altro server. Mi sono guardato un po 'intorno e ho visto il phpseclib raccomandato. Non riesco a capire come installare phpseclib. Qui ci sono le linee che il sito web ha dato:Come installare phpseclib?

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib'); 
include('Net/SFTP.php'); 

è necessario impostare il percorso di inclusione.

Capisco cosa significano queste parole ma non sono riuscito a farlo funzionare. Sto usando un mac. Il mio server è in /Users/diego/Sites/. Dove devo esattamente mettere la cartella phpseclib? Quali linee devo inserire nel mio file php in modo che sia incluso phpseclib?

risposta

0

ho ottenuto che funziona con l'installazione di PEAR, seguendo this guide.

Seguendo sopra la guida, ho capito che era alla ricerca di apache2 php.ini nella mia cartella /etc/. Ma mi sono imbattuto in un problema. Nella mia cartella /etc/ non c'era il file php.ini. Ma c'era php.ini.defualt. Così ho salvato come php.ini.default su php.ini e poi ho modificato il percorso include.

; UNIX: "/path1:/path2" 
;include_path = ".:/php/includes" 
include_path = ".:/Users/diego/pear/share/pear:/php/includes" 

PHP non è più sta gettando un errore dicendo che phpseclib non può essere trovato.

2

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib'); aggiungerà phpseclib come percorso relativo. Così facendo include('Net/SFTP.php') includerà phpseclib/Net/SFTP.php ma questo è relativo a qualunque sia la directory di lavoro.

PEAR ha spesso un percorso assoluto nel percorso include. Quindi è qualcosa che potresti provare a fare. Mettendo phpseclib in qualche directory (prob al di fuori della root del documento) e poi inserendo quella directory nel tuo include_path.

Si noti che questo è più importante se avete scaricato phpseclib da sourceforge.net o se siete sul ramo 1.0.

1

Grazie a Diego, per il suggerimento di installare PEAR. Ho ottenuto il lavoro con i seguenti passi:

Innanzitutto, installare PEAR.

$ wget http://pear.php.net/go-pear.phar 
$ php go-pear.phar 

Se il wget comando non funziona, si prega di installare il pacchetto, per farlo funzionare.

$ sudo apt-get install wget 

Dopo aver installato correttamente PEAR, configurarlo con questo guide.

Il file php.ini può essere trovato in /etc/php5/apache2. Devi modificare questo file.

All'improvviso, ho provato la nuova libreria. Ma ho avuto un po 'di errori di, invece, come in questo stackoverflow post descritto. Per questo problema, ho ottenuto la soluzione per esso, in questo stackoverflow post.

3

Ho provato a installare phpseclib sulla macchina Linux.Ha funzionato perfettamente per me. Spero tu abbia bisogno di una configurazione simile sul tuo Mac.

Su server Linux eseguire il seguente comando.

sudo apt-get install php5-pgsql php-pear 
sudo pear channel-discover phpseclib.sourceforge.net 
sudo pear remote-list -c phpseclib 
sudo pear install phpseclib/Net_SSH2 
sudo service apache2 restart 

Su Mac, utilizzando la porta Mac eseguire seguente comando sudo port -v selfupdate sudo port install php54-ssh2

#add this to the php.ini file /etc/php.ini, it can be placed at the end of the file 
extension=/opt/local/lib/php54/extensions/no-debug-non-zts-20100525/ssh2.so 
sudo /usr/sbin/apachectl restart 

Su Mac, utilizzando homebrew eseguire comando seguente. brew install php54-ssh2

Scaricare la libreria phpseclib e includerla nella directory del progetto.

Nel file php pertinente aggiungere il seguente codice.

include('phpseclib1.0.5/Net/SFTP.php'); 

set_include_path(get_include_path().PATH_SEPARATOR.'phpseclib'); 
define('NET_SFTP_LOGGING', NET_SFTP_LOG_COMPLEX); 

$sftp = new Net_SFTP('555.55.55.55', 22); 

if(!$sftp->login('username', 'password')) { 
    echo $sftp->getSFTPLog(); 
    die('Login failed!'); 
} else { 
    echo $sftp->pwd(); 
    echo $upload = $sftp->put('/sftp/'.$filename, $uploadedfile, NET_SFTP_LOCAL_FILE); 
}