2015-05-28 185 views
8

我在我的機器上安裝了Apache,因此我可以使用localhost作爲PHP服務器。這樣可行。現在我試圖使用PHP通過SFTP將文件發送到另一臺服務器。我環視了一下,看到推薦使用phpseclib。我似乎無法弄清楚如何安裝phpseclib。以下是該網站給了臺詞:你必須設置包含路徑如何安裝phpseclib?

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

我明白這些詞的意思,但我一直無法得到它的工作。我正在使用一個mac。我的服務器位於/Users/diego/Sites/。在哪裏我需要把phpseclib文件夾?我需要將哪些行放入我的php文件中,以便包含phpseclib

回答

0

我把它通過安裝PEAR工作,以下this guide.

遵循以上指導,我想通了,Apache2的是在我/etc/文件夾中尋找php.ini。但我遇到了一個問題。在我的/etc/文件夾中沒有php.ini文件。但有php.ini.defualt。所以我'保存爲'php.ini.defaultphp.ini,然後修改include_path。

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

PHP不再拋出錯誤,表示phpseclib找不到。

2

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');將添加phpseclib作爲相對路徑。所以做include('Net/SFTP.php')將包括phpseclib/Net/SFTP.php但這是相對於你的工作目錄是什麼。

PEAR通常在include_path中有一個絕對路徑。所以這是你可以嘗試做的事情。將phpseclib放在某個目錄中(prob在文檔根目錄之外),然後將該目錄放入include_path。

請注意,如果您從sourceforge.net下載了phpseclib或者如果您位於1.0分支上,則這一點更爲重要。

1

感謝迭戈,提示安裝PEAR。我得到它與以下步驟:

首先,安裝PEAR

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

如果wget的命令不能正常工作,請安裝該軟件包,得到它的工作。

$ sudo apt-get install wget 

成功安裝PEAR後,與此guide配置。

php.ini文件可以在/etc/php5/apache2中找到。你必須修改這個文件。

突然,我測試了新的庫。但是我得到了一堆錯誤,就像在這裏描述的stackoverflow post一樣。 對於這個問題,我得到了它的解決方案,在這stackoverflow post

3

我試過在linux機器上安裝phpseclib。它對我來說非常合適。我希望你在你的Mac上需要類似的配置。

在linux服務器上執行以下命令。

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 

在Mac上,使用MAC端口執行-v自更新 須藤端口下面的命令 sudo的港口安裝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 

在Mac上,使用自制的執行下面的命令。 brew安裝php54-ssh2

下載phpseclib庫幷包含到您的項目目錄中。

在相關的php文件中添加如下代碼。

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); 
}