2012-06-19 4 views
1

У меня есть следующий сценарий ниже, где я пытаюсь воспроизвести загрузку файла по FTP, но изменил его для SFTP, используя phpseclib.Загрузка файла SFTP через PHP

Сценарий не повторяет из прекрасно до линии:

$ закачивать = $ conn_id-> ставить ($ пути '/' $ имя, $ Филеп, NET_SFTP_LOCAL_FILE..); echo "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()); 
?> 

Так просто изменить $ данные в «положить» функции, чтобы быть имя файла, и добавление режима, как вы сделали в своем коде.

Альтернативой могут быть функции PECL, предоставляемые PHP. Они имеют встроенные функции 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_server для пользователя $ sftp_user_name ...."; выход; } else { echo "Подключено к $ sftp_server, для пользователя $ sftp_user_name". "....."; } $ upload = $ sftp-> put ($ paths. '/'. $ Name, $ filep, NET_SFTP_LOCAL_FILE); – user1406476

Смежные вопросы