PHPの質問です。

外部サーバ上のデータの差分のみをダウンロードする方法を教えてください。

1. 外部FTPサーバ上に、テキストファイルAが置いてあります。
2. ローカルサーバには、AのコピーであるA’が置いてあります。
3. Aには随時文字列が追記されていきます。(かなりの頻度で)

この条件で、AとA’の差分を取得したいのですが、
効率のよい方法はありますか?

・全体をダウンロードして比較する【以外】の回答をお願いします。
・【PHPではできません】という内容はコメント欄にお願いします。
・【○○○ならできます】という内容であれば回答欄にてご教授ください。
 ただし、実行に手間がかかるものは不可とさせてください。
 (30秒おきに自動実行・・みたいなものが理想です)

外部FTPサーバ
 Apache たぶん1.3系。その他詳細不明。
 PHPなどは設置できません。基本的にはいじれません。

ローカル環境
 WindowsXP Pro SP3
 Apache 2.2系(変更可)
 PHP 5.x
 拡張モジュール、その他ツールなどは自由に入れられます。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/10/21 20:53:54
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:pacochi No.1

回答回数247ベストアンサー獲得回数113

ポイント99pt

普通に ftp_get でダウンロード開始位置を指定してダウンロードするのでは駄目なのでしょうか。

<?php
$ftp_server = 'FTP サーバ';
$ftp_user_name = '名前';
$ftp_user_pass = 'パスワード';

$remote_file = "./log.txt";
$local_file = "./log.txt";
$local_file_size = filesize($local_file);
$local_diff_file = "./diff.txt";

$conn_id = ftp_connect($ftp_server, 21, 120); 
if (!$conn_id) exit("{$ftp_server} に接続できませんでした。");
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if (!$login_result) exit("{$ftp_server} に接続できませんでした。");

ftp_get($conn_id, $local_file, $remote_file, FTP_BINARY, $local_file_size);

ftp_close($conn_id);

$local_diff = file_get_contents($local_file, false, NULL, $local_file_size);
file_put_contents($local_diff_file, $local_diff);

?>

Aが $remote_file 、A’が $local_file、差分が $local_diff および $local_diff_file です。

id:Numeric

ご回答ありがとうございます。


今、リファレンスを確認しました。。ダメじゃない気がします。

質問する前に読んだつもりなんですが、見落としていたようです。

お恥ずかしい…


とりあえずこれで試してみます。


---

追記


できました。完璧です!

resumeposを指定すると、追加分だけをマージしてくれるんですね。

知らなかったことがたくさん。ありがとうございました。

2010/10/21 20:36:09

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません