2011-06-22 23 views
3

少し前に質問を投稿しましたが、間違った質問(doh!)であるFTPについて尋ねました。 SFTP/SSHを使用して、あるサーバーから別のサーバーにイメージ(例:test.jpg)を自動的に転送する必要があります。PHP SFTP/SSH転送

どうすればいいですか?私はできるだけ多くの情報が本当に感謝されるように、この種のものに全く新しいです。任意の助け

おかげ

<?php 

$local_file = "http://localhost/ftptest/logo.png"; 
$remote_file = "/logo.png"; 

exec("scp $local_file username:[email protected]***.**.238.87:$remote_file"); 

?> 

編集:私はこれが機能することを見つけ、最後に

<?php 

    include('Net/SFTP.php'); 

    $image = 'logo.jpg'; //image to be uploaded - needs to be in the same directory as this script e.g. just logo.jpg 

    $image_contents = file_get_contents($image); // location of image to be uploaded 

    $sftp = new Net_SFTP('***.**.**.**'); // server address to connect to 
    if (!$sftp->login('***', '***')) { // server login details 
     exit('Login Failed'); 
    } 

    echo $sftp->pwd(); 
    $sftp->put($image, $image_contents); // upload a file $image with the image contents. 

?> 

作業SSHを取得できませんでしたが、うまくいけば、これは、誰かを助けます将来は:)

答えて

2

ここであまりにも多くの場合、あなたが達成しようとしていることや制約について多くの情報を提供していません。

画像はどこから由来していますか?どのくらい迅速に複製する必要がありますか?サーバーはクラスター内の同等のノードですか?

両方のサーバがすでにHTTPを話しているので、コンテンツを転送するために別のプロトコルを使用するのはなぜですか?

Antonioが示唆しているように、単にscpをexecすることができますが、これは鍵ペアが設定されている場合にのみ有効です。 (sshが必要条件であると仮定)

より柔軟なソリューションは、あなたがssh2_scp_sendを試すことができますssh bindings in PHP

+0

こんにちはsymcbean、私はこれを見てきましたが、私は何をすべきか理解するのに苦労しています。これまでPHPスクリプトと同じディレクトリにphpseclibファイルをダウンロードしてから、include( '/ Net/SSH2.php')を追加しました。スクリプトファイルに追加します。私もopensslをダウンロードしましたが、どうしたらいいのかわかりません、どうか説明してください。ありがとう –

+0

私はphpinfo()を行い、opensslが既に有効になっていると言います。私が得ているエラーは '未定義の関数ssh2_connect()'を呼び出すことです、それは間違ってphpseclibファイルをインストールしたことを意味しますか? –

+0

これはssh2 PECLがインストールされていないことを意味します。どのようにPHPを使用しているのか、どのOSを実行しているのか、そしてPHPをどこから入手したのかによって、gettnigについてどう思いますか? – symcbean

2

これを処理する簡単な方法は、PHPを呼び出すことですを実行し、unix scp呼び出しを実行します。

exec("scp $local_file [email protected]:$remote_file"); 
+0

こんにちはアントニオ、私は私が持っているコードで私の質問を更新しましたが、イメージを2番目のサーバーに転送していません。私は何か間違っているのですか? –

+1

Symcbeanは正しいですが、scpを認証するようにキーペアを設定する必要があることは言及していません。それを設定することで、私の答えは少し複雑になります。 symcbeanの解決策を見てみましょう。それはそれについてのより良い方法かもしれません。 –

1

を使用することです:

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

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