2

ここで少し奇妙な概念...私たちのクライアントは、FTP/Sを介してデータをプッシュしたいと考えています

URL(CSVファイル)からダウンロードしてレポートの1つをダウンロードし、それをFTP/S経由でクライアントにプッシュするという考え方です。私はwgetとftpを使用してbashスクリプトでこれを行うことができることを知っていますが、PHPが最善の方法であるように、Webインターフェイスを介してこれに追加する必要があります。

これはバックグラウンドタスクなので、タイムアウトなどを延長できます。

また、fopenを使用してファイルをダウンロードして保存し、PHPFTPライブラリを使用してファイルを見つけてアップロードできることも知っています。fopenを使用してダウンロードする方法を探しているだけで、データをメモリに保持してすぐにアップロードできます。

事前に感謝します!

4

2 に答える 2

4

URLからデータを取得するには、いくつかのオプションがあります。メモリ内のデータをFTPホストに直接プッシュするだけにしたいということです。

1つのアプローチ(私が使用するのが最も簡単だと思いますが、信頼性とエラー処理の点で欠けています)はfile_get_contents()

例:

$url = 'http://www.domain.com/csvfile';
$data = file_get_contents($url);

これで、csvデータが$dataになりました。これをftpサーバーにプッシュする方法について説明します。

この場合も、これを行う最も簡単な方法は、上記のgetの例で使用されている組み込みのストリームラッパーを使用することです。(ただし、これにはPHP 4.3.0が必要であることに注意してください)

このように接続文字列を作成するだけです。

$protocol = 'ftps';
$hostname = 'ftp.domain.com';
$username = 'user';
$password = 'password';
$directory = '/pub';
$filename = 'filename.csv';
$connectionString = sprintf("%s://%s:%s@%s%s/%s",
    $protocol,$username,$hostname,
    $password,$directory,
    $filename);


file_put_contents($connectionString,$data);

ftpラッパーのマニュアルをご覧ください

これが機能しない場合は、他のオプションがあります。

curlを使用してデータを取得し、FTP拡張機能を使用してデータをプッシュできます。

于 2011-06-16T09:01:07.593 に答える
1

ファイルをディスクに保存することを避け、「すぐにアップロードする」、つまりデータの最初のチャンクがダウンロードされるとすぐにFTPへのプッシュを開始するには?

これを試してください: http ://www.php.net/manual/en/function.stream-copy-to-stream.php

アップロードの再開をサポートするFTPサーバーとクライアントライブラリが必要です

于 2011-06-16T09:13:57.597 に答える