2009-11-19 83 views
4

我在使用PHP將SFTP上傳文件到遠程服務器時遇到了問題。當我使用捲曲,我得到這裏所描述的錯誤:如何從SFTP上傳PHP的文件

SFTP from PHP - undefined constant CURLOPT_PROTOCOLS and CURLPROTO_SFTP?

我也試過phpseclib中建議:

SFTP from within PHP

但是當我嘗試phpseclib,我得到這些錯誤:

Warning: require_once(Math/BigInteger.php) [function.require-once]: failed to open stream: No such file or directory in /home/john/public_html/test/Net/SSH2.php on line 53 

Fatal error: require_once() [function.require]: Failed opening required 'Math/BigInteger.php' (include_path='.:/usr/share/php:/usr/share/pear') in /home/john/public_html/test/Net/SSH2.php on line 53 

然後我嘗試在php中使用系統命令就像這樣,但沒有發生任何事情:

<?php 
echo system('sftp [email protected]'); 
echo system('password'); 
echo system('put file.csv'); 
?> 

我也試過

<?php 
$connection = ssh2_connect('shell.example.com', 22); 
ssh2_auth_password($connection, 'username', 'password'); 

ssh2_scp_send($connection, '/local/filename', '/remote/filename', 0644); 
?> 

,但我的PHP服務器說沒有定義ss2_connect。

我試着做從終端

scp file.csv [email protected] 
password 

以下但服務器不允許scp命令。我沒有shell訪問權限來創建ssh密鑰。

我現在所能做的就是從終端sftp並手動上傳。但我真的想自動化,所以PHP網站可以做到這一切。

關於如何從PHP上傳SFTP的教程並不多。是因爲這是一件壞事嗎?如果是這樣,我該怎麼做?我想要上傳到的服務器只允許sftp連接。

回答

0

使用內置的SSH庫。使用scp函數也比啓動sftp會話更容易。

http://www.php.net/manual/en/function.ssh2-scp-send.php

+0

我正在處理的服務器說ssh2_connect()沒有定義。另外,我連接的遠程主機不允許我scp file.csv [email protected] – John

+1

這可能不是默認情況下可用的。您需要使用libssh2的PECL ssh2擴展。 –

0

要使用system命令,你必須:

  1. 配置無密碼的SSH
  2. 運行命令一樣scp filename1 [email protected]:filename2,檢查man scp。你可以做同樣的sftp但也有一些其他的選擇
1

但我的PHP服務器說ss2_connect沒有定義。

對於這個錯誤,你應該在服務器的php上安裝ssh2擴展。