1

これはできないと言われましたが、ここで他の意見を求めたいと思います。このようなことになると、私は少し初心者です。

私のサイト: ExampleSiteA.com

ダウンロードするファイル: ExampleSiteB.com

基本的に、私のサイト ExampleSiteA.com を更新するために、ExampleSiteB.com から csv ファイルをダウンロードしています。これを行うには、CoreFTP を使用して csv ファイルを手動でダウンロードし、それを手動で ExampleSiteA.com にアップロードします。ファイルは毎日変更されるため、プロセスを自動化できるように、この手順をスキップしたいと考えています。

SFTP を介して ExampleSiteB.com から csv ファイルをダウンロードする必要があることに注意してください...

SFTPの場合、あるサーバーから別のサーバーにファイルを直接ダウンロード/アップロードできるかどうかはわかりません。ファイルサイズもかなり大きく、平均で約25,000KB/25MB。

まだ検討していない別のオプションは、別のサーバーからのファイルを要求または含めることです...それはオプションまたは可能性ですか? ファイルは私のサイト専用のフォルダーにあり、SFTP ダウンロードにはログインが必要です。

どんな洞察も高く評価されます。前もって感謝します!

4

5 に答える 5

7

ここに行き、必要なものをダウンロードしてください:http: //phpseclib.sourceforge.net/

アップデート

  • SFTPの場合

次に、スクリプトで:

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

$url = 'http://www.downloadsite.com';
$fileToDownload = "yourCSV.csv";
$cmd = "wget -q \"$url\" -O $fileToDownload";
exec($cmd);

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

echo $sftp->pwd() . "\r\n";
$sftp->put('remote.file.csv', 'yourCSV.csv', NET_SFTP_LOCAL_FILE);
print_r($sftp->nlist());
?>

ダウンロードのために2番目のサーバーに接続する必要がある場合:

$sftp2 = new Net_SFTP('www.serverFromWhichToDownload.com');
if (!$sftp2->login('username', 'password')) {
    exit('Login Failed');
}

echo $sftp2->pwd() . "\r\n";
$sftp2->get('localFileName.csv', 'remoteFileName.csv');
print_r($sftp2->nlist());

詳細なヘルプと例については、ドキュメントをお読みください:http: //phpseclib.sourceforge.net/documentation/net.html#net_sftp_get

接続が失敗した場合などに接続が行っていることをログに記録するには、次を使用します。

include('Net/SSH2.php');
define('NET_SSH2_LOGGING', true);
$ssh = new Net_SSH2('www.domain.tld');
$ssh->login('username','password');
echo $ssh->getLog();
  • FTPアップロードの場合-SOはおかしくなり、コードをフォーマットしたくありませんが、とにかくここにあります:
$ file ='somefile.txt';
$ remote_file ='readme.txt';
$ conn_id = ftp_connect($ ftp_server);
$ login_result = ftp_login($ conn_id、$ ftp_user_name、$ ftp_user_pass);
if(ftp_put($ conn_id、$ remote_file、$ file、FTP_ASCII)){
    echo"アップロードに成功しました$file\ n";
} そうしないと {
    echo"$fileのアップロード中に問題が発生しました\n";
}
ftp_close($ conn_id);
于 2012-06-11T15:34:20.877 に答える
2

はい、それはssh2_sftpを使用して可能です。

http://php.net/manual/en/function.ssh2-sftp.php

于 2012-06-11T13:37:24.303 に答える
2

私は過去にcURLで幸運に恵まれました。Linux ボックスを使用している場合、CRON ジョブをセットアップしてこの更新プロセスを実行するのは簡単です。cURL での CLI HTTP スクリプトの適切なリファレンスはここにありますが、アップロード部分を実行するには、-T フラグ (ファイル転送用) が必要になる場合があります。アップロードといえば、更新したいサーバーからスクリプト/プロセス/crontabを実行できる場合は、Webサーバーからダウンロードして、ワントリップとサードパーティを不要にすることをお勧めします. または、オンデマンドで更新する必要がある場合は、組み込みのPHP cURL 関数を使用する PHP スクリプトを作成できます。Linux+CLI ルートを使用する場合は、sftpも使用できます。

更新: sftp ( curl -u uname:pword sftp://domain.tld) を使用して curl をテストすると、次のエラーが発生curl: (1) Protocol sftp not supported or disabled in libcurlします: Kubuntu 12.04 で。そのため、cURL はお勧めできません。CLI sftp ( sftp uname@domain.tld:/dir/file.ext) もテストしましたが、(ssh キーを使用しない限り) 認証を送信する方法が見つかりませんでした。したがって、サーバー間に ssh キーを設定しない限り、これは必然的に手動のプロセスになります。ExampleSiteB.com へのそのようなアクセス権を持っているとは思えないため、これはおそらく受け入れられません。

更新 2:最初の回答はほとんど役に立たないことが判明したため、上記の回答のいずれかを拡張することにしました。PECL 拡張機能を使用しない解決策を見つけようとしていましたが、ftp_ssh_connect() ではうまくいきませんでした。試してみることをお勧めします。運が良ければ、PECL 延長ルートを忘れることができるかもしれません。

ため息、さらに読むftp_ssh_connectと、当然のことながら、sftpプロトコルと互換性がないようです。しかし、 (以前の回答で述べたように) and の利用に関する素敵なブログ投稿を見つけたので、追加の支援を提供するためにそれを投稿することにしましssh2_connect()た。ssh2_sftp()ほとんどの PHP ディストリビューションの関数を呼び出すほど単純ではありません。 ブログ記事はこちら。 これらの手順の一部は必要ない場合や、別のブログ投稿 (こちら) に記載されている追加の操作が必要になる場合があります

私のシステムでは、実行するだけで、出力apt-get install libssh2-1-dev libssh2-phpで ssh2 を見つけることができました。php -m

于 2012-06-11T13:49:41.293 に答える
1

インクルードがあれば、ファイルを取得しているWebサイトで読み取り/書き込み権限があれば機能するはずですが、チェックする手段がないため、これは単なるATMの推測です。でも頑張ってください!

于 2012-06-11T13:36:07.897 に答える
1

はい、あなたはこれを行うことができるはずです。

これができないと言った人は誰でも、JavaScriptとクロスサイトスクリプティングブラウザの制限と混同される可能性があります。これにより、JavaScriptが1つのドメインからダウンロードされて別のドメインのコンテンツにアクセスできなくなります。

そうは言っても、Webサーバーで実行されているPHPについて話していることを意味するPHPを使用している場合は、PHPまたはその他のスクリプト言語またはプログラミング言語を使用してSiteB.comからファイルをダウンロードし、更新できるはずです。ファイルを作成し、最後にファイルを別のWebサーバー(SiteA.com)にFTPで転送します。

于 2012-06-11T13:37:08.143 に答える