2012-06-19 4 views
1

아래의 스크립트를 사용하여 FTP를 통해 파일 업로드를 모방하려고하지만 phpseclib를 사용하여 SFTP로 변경했습니다.PHP를 사용하는 SFTP 로컬 파일 업로드

스크립트가 줄 때까지 잘 메아리 :

$ 업로드 = $ conn_id-> 넣어 ($를 경로 '/'$ 이름, $를 알기 위해 Filep, NET_SFTP_LOCAL_FILE..) "upload ==". $ upload. "\ n";

아무 것도 일어나지 않거나 인쇄됩니다. 여기

전체 스크립트입니다

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

if(!isset($_POST["submit"])){?> 

<form action="upload.php" method="POST" enctype="multipart/form-data"> 
<table align="center"> 
<tr> 
<td align="right"> 
Server: 
</td> 
<td> 
<input size="50" type="text" name="server" value=""> 
</td> 
</tr> 
<tr> 
<td align="right"> 
Username: 
</td> 
<td> 
<input size="50" type="text" name="user" value=""> 
</td> 
</tr> 
<tr> 
<td align="right"> 
Password: 
</td> 
<td> 
<input size="50" type="text" name="password" value="" > 
</td> 
</tr> 
<tr> 
<td align="right"> 
Path on the server: 
</td> 
<td> 
<input size="50" type="text" name="pathserver" > 
</td> 
</tr> 
<tr> 
<td align="right"> 
Select your file to upload: 
</td> 
<td> 
<input name="userfile" type="file" size="50"> 
</td> 
</tr> 
</table> 
<table align="center"> 
<tr> 
<td align="center"> 
<input type="submit" name="submit" value="Upload image" /> 
</td> 
</tr> 

</table> 
</form> 
<?} 
else 
{ 

set_time_limit(300);//for setting 

$paths=$_POST['pathserver']; 

echo "paths == ".$paths."\n"; 

$filep=$_FILES['userfile']['tmp_name']; 

echo "filep == ".$filep."\n"; 

$sftp_server=$_POST['server']; 

echo "sftp_server == ".$sftp_server."\n"; 

$sftp_user_name=$_POST['user']; 

echo "sftp_user_name == ".$sftp_user_name."\n"; 

$sftp_user_pass=$_POST['password']; 

echo "sftp_user_pass == ".$sftp_user_pass."\n"; 

$name=$_FILES['userfile']['name']; 

echo "name == ".$name."\n"; 



// set up a connection to ftp server 
$conn_id = new Net_SSH2($sftp_server); 

// login with username and password 
$login_result = $conn_id->login($sftp_user_name, $sftp_user_pass); 

// check connection and login result 
if ((!$conn_id) || (!$login_result)) { 
     echo "SFTP connection has encountered an error!"; 
     echo "Attempted to connect to $sftp_server for user $sftp_user_name...."; 
     exit; 
    } else { 
     echo "Connected to $sftp_server, for user $sftp_user_name"."....."; 
    } 


echo "HERE "."\n"; 
// upload the file to the path specified 


$upload = $conn_id->put($paths.'/'.$name, $filep, NET_SFTP_LOCAL_FILE); 
echo "upload == ".$upload."\n"; 

// check the upload status 
if (!$upload) { 
     echo "SFTP upload has encountered an error!"; 
    } else { 
     echo "Uploaded file with name $name to $sftp_server "; 
    } 

// close the FTP connection 
ftp_close($conn_id);  

} 
?> 
+0

왜 출력해야합니까? – hakre

+0

var_dump ($ upload) 란 무엇입니까? – GeneSys

답변

1

NET/ssh2.php이 어떤 라이브러리? http://phpseclib.sourceforge.net처럼 보입니까?

SSH2 및 SFTP 라이브러리를 혼합합니다. 자신의 매뉴얼에서 직접 촬영, 당신이 원하는 코드는 다음과 같습니다

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

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

echo $sftp->pwd() . "\r\n"; 
$sftp->put('filename.ext', 'hello, world!'); 
print_r($sftp->nlist()); 
?> 

그래서 그냥 파일 이름이 될 수있는 "넣어"함수에서 $ 데이터를 변경, 당신은 당신의 코드에서 수행 한대로 모드를 추가.

다른 대안은 PHP에서 제공하는 PECL 기능입니다. 이들은 sftp 기능을 내장하고 있습니다. 예제 코드가 http://www.php.net/manual/en/function.ssh2-sftp.php이고 여전히 작동하지 않으면 모든 액세스가 가능하므로 더 쉽게 디버그 할 수 있습니다.

+0

감사합니다. 사랑 스럽다. 필요한 코드는 다음과 같습니다. $ sftp = new Net_SFTP ($ sftp_server); // 사용자 이름과 암호로 로그인 $ login_result = $ sftp-> login ($ sftp_user_name, $ sftp_user_pass); // 연결 및 로그인 결과를 확인하십시오. if ((! $ sftp) || (! $ login_result)) { echo "SFTP 연결에 오류가 발생했습니다!"; echo "$ sftp_user_name 사용자를 위해 $ sftp_server에 연결을 시도했습니다 ...."; exit; } else { echo "$ sftp_user_name에 $ sftp_server에 연결되었습니다.", "....."; } $ upload = $ sftp-> put ($ paths. '/'. $ name, $ filep, NET_SFTP_LOCAL_FILE); – user1406476

관련 문제