2013-07-16 47 views
6

これは以前に尋ねられたかもしれませんが、私はPHPを初めて使い、できる限り多くのことを学ぼうとしていますが、これは本当に私を投げ捨てました。sftp経由でリモートサーバーからPHPをダウンロード

基本的に私が知りたいのは、リモートサーバーからローカルの場所にすべてをダウンロードするためにPHPコードを使用する方法です。それは私が立ち往生している1つのファイルだけでなく、すべてをダウンロードするようになっています。ですから、誰かが私にこのことをどうやって見せるか/説明することができますか?

ありがとうございます。私は私の$リモコンは= "$のremote_dir" だと思い、これまで

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

$remote_dir="/remote_dir/"; 
$local_dir="/local_dir/"; 

$remote ="$remote_dir"; 
$stream = ssh2_exec($connection, $remote); 
stream_set_blocking($stream,true); 
$command=fread($stream,4096); 

$array=explode(\n,$command); 

$total_files=sizeof($array); 

for($i=0;$i<$total_files;$i+++){ 
    $file_name=trim($array[$i]); 
    if($file_name!=''{ 
     $remote_file=$remote_dir.$file_name; 
     $local_file=$local_dir.$file_name; 

     if(ssh2_scp_recv($connection, $remote_file,$local_file)){ 
      echo "File ".$file_name." was copied to $local_dir<br />"; 
     } 
    } 
} 
fclose($stream); 
?> 

を持って何

。間違っていて、正直言ってディレクトリ全体が必要なときに$ filenameがあります。これはこれまでのところすべてです。

+3

あなたがこれまで行ってきたことを投稿し、重要な情報があれば置き換えることを忘れないでください。 – Prix

+0

ちょうど私がこれまでに得たものを加えました。私が言ったように、もしそれが正しければ、あるいは数週間前にPHPを始めたばかりではないが、私はおそらくここで私の頭の上にいる。 – user2589167

+0

あなたが好きなサンプルの希望を投稿しました。あなたはStackoverflowを初めて利用しています。[**私はまた、Stackoverflowツアーに出かけて、このウェブサイトを最大限に活用する方法を知っています。 ](http://stackoverflow.com/about) – Prix

答えて

11

ここでフォルダを読み、そのすべてのファイルをダウンロードする方法に小さなコードは次のとおりです。

<?php 
$host = 'localhost'; 
$port = 22; 
$username = 'username'; 
$password = 'password'; 
$remoteDir = '/must/be/the/complete/folder/path'; 
$localDir = '/can/be/the/relative/or/absolute/local/path'; 

if (!function_exists("ssh2_connect")) 
    die('Function ssh2_connect not found, you cannot use ssh2 here'); 

if (!$connection = ssh2_connect($host, $port)) 
    die('Unable to connect'); 

if (!ssh2_auth_password($connection, $username, $password)) 
    die('Unable to authenticate.'); 

if (!$stream = ssh2_sftp($connection)) 
    die('Unable to create a stream.'); 

if (!$dir = opendir("ssh2.sftp://{$stream}{$remoteDir}")) 
    die('Could not open the directory'); 

$files = array(); 
while (false !== ($file = readdir($dir))) 
{ 
    if ($file == "." || $file == "..") 
     continue; 
    $files[] = $file; 
} 

foreach ($files as $file) 
{ 
    echo "Copying file: $file\n"; 
    if (!$remote = @fopen("ssh2.sftp://{$stream}/{$remoteDir}{$file}", 'r')) 
    { 
     echo "Unable to open remote file: $file\n"; 
     continue; 
    } 

    if (!$local = @fopen($localDir . $file, 'w')) 
    { 
     echo "Unable to create local file: $file\n"; 
     continue; 
    } 

    $read = 0; 
    $filesize = filesize("ssh2.sftp://{$stream}/{$remoteDir}{$file}"); 
    while ($read < $filesize && ($buffer = fread($remote, $filesize - $read))) 
    { 
     $read += strlen($buffer); 
     if (fwrite($local, $buffer) === FALSE) 
     { 
      echo "Unable to write to local file: $file\n"; 
      break; 
     } 
    } 
    fclose($local); 
    fclose($remote); 
} 

あなたがまた再開することができますにこのコード(それはディレクトリをコピーしません)

while (false !== ($file = readdir($dirHandle))) 
{ 
    if ($file == "." || $file == "..") 
     continue; 

    echo "Copying file: $file\n"; 
    if(!ssh2_scp_recv($connection, $remoteDir . $file, $localDir . $file)) 
     echo "Could not download: ", $remoteDir, $file, "\n"; 
} 

あなたはそれが動作しませんリモートフォルダのフルパスを使用しない場合:

opendir("ssh2.sftp://{$stream}{$remoteDir}") 
+0

これは近くにありがとう、ありがとうございました – user2589167

+0

if(!$ remote = @fopen( "ssh2.sftp:// {$ stream}/{$ remoteDir}/{$ file} "、 'r'))//スラッシュに気付く –

0

アップデート:これはsftpを使用せず、代わりにftpsを使用することを親切に修正しました。ここでは、using PHP to do SFTPについて議論しているStackoverflowのリンクです。

PHP docsは、これに必要なもののほとんどを既にカバーしています。ここでは、リモート・ディレクトリ内のコンテンツのリストを取得するための例です:

<?php 
// set up basic connection 
$ftp_server = "example.com"; 
$conn_id = ftp_ssl_connect($ftp_server); 

// login with username and password 
$ftp_user_name = "myuser"; 
$ftp_user_pass = "mypass"; 
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 
ftp_pasv($conn_id, true); 
// check connection 
if ((!$conn_id) || (!$login_result)) { 
     echo "FTP connection has failed!"; 
     echo "Attempted to connect to $ftp_server for user $ftp_user_name"; 
     exit; 
    } else { 
     echo "Connected to $ftp_server, for user $ftp_user_name"; 
    } 

$buff = ftp_rawlist($conn_id, '.'); 
var_dump($buff); 
ftp_close($conn_id); 
?> 
+0

クイック返信ありがとう!だから私はディレクトリのすべてのリストを確認することができますこれを使用して、ftp_sslを使用してSFTPを使用して同じですか? – user2589167

+0

はい。これにより、ディレクトリ内のすべてのファイルの一覧が表示され、SSLを使用しています(SFTP –

+1

)。これらは同じものではありません。SFTPはSSHファイル転送プロトコルで、SSL経由のFTPはFTPセキュアとFTP-SSL、ここでは良い記事ですhttps://www.eldos.com/security/articles/4672.php – Prix

関連する問題