2011-09-14 40 views
6

Tôi đang cố tải xuống tệp từ máy chủ sftp bằng cách sử dụng php nhưng tôi không thể tìm thấy bất kỳ tài liệu chính xác nào để tải xuống tệp.Cách tải xuống tệp từ SFTP bằng cách sử dụng PHP?

<?php 
$strServer = "pass.com"; 
$strServerPort = "22"; 
$strServerUsername = "admin"; 
$strServerPassword = "password"; 
$resConnection = ssh2_connect($strServer, $strServerPort); 
if(ssh2_auth_password($resConnection, $strServerUsername, $strServerPassword)) { 
    $resSFTP = ssh2_sftp($resConnection); 
    echo "success"; 
} 
?> 

Khi tôi mở kết nối SFTP, tôi cần phải làm gì để tải xuống tệp?

+1

Vậy câu hỏi là gì? –

+0

@Baszz đọc tiêu đề. –

+1

@ OZ_: Tôi biết ... Tôi đã chỉnh sửa theo cách đó. –

Trả lời

5

Sử dụng phpseclib, a pure PHP SFTP implementation:

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

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

// outputs the contents of filename.remote to the screen 
echo $sftp->get('filename.remote'); 
?> 
3

Một khi bạn đã kết nối SFTP của bạn đang mở, bạn có thể đọc các tập tin và viết sử dụng các hàm PHP chuẩn như fopen, fread, và fwrite. Bạn chỉ cần sử dụng trình xử lý tài nguyên ssh2.sftp:// để mở tệp từ xa của mình.

Dưới đây là một ví dụ mà sẽ quét một thư mục và tải về tất cả các file trong thư mục gốc:

// Assuming the SSH connection is already established: 
$resSFTP = ssh2_sftp($resConnection); 
$dirhandle = opendir("ssh2.sftp://$resSFTP/"); 
while ($entry = readdir($dirhandle)){ 
    $remotehandle = fopen("ssh2.sftp://$resSFTP/$entry", 'r'); 
    $localhandle = fopen("/tmp/$entry", 'w'); 
    while($chunk = fread($remotehandle, 8192)) { 
     fwrite($localhandle, $chunk); 
    } 
    fclose($remotehandle); 
    fclose($localhandle); 
} 
+0

Bắt đầu từ PHP5.6, thao tác này sẽ không hoạt động và sẽ không hoạt động:

 $remotehandle = fopen("ssh2.sftp://$resSFTP/$entry", 'r'); 
$ resSFTP phải được chuyển đổi thành int:
 $remotehandle = fopen('ssh2.sftp://' . intval($resSFTP) . '/$entry', 'r'); 

Các vấn đề liên quan