外部サーバ上のデータの差分のみをダウンロードする方法を教えてください。
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
拡張モジュール、その他ツールなどは自由に入れられます。
普通に 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 です。
ご回答ありがとうございます。
今、リファレンスを確認しました。。ダメじゃない気がします。
質問する前に読んだつもりなんですが、見落としていたようです。
お恥ずかしい…
とりあえずこれで試してみます。
---
追記
できました。完璧です!
resumeposを指定すると、追加分だけをマージしてくれるんですね。
知らなかったことがたくさん。ありがとうございました。