function crawl(Shingetsu_Client $s) { $files = $s->recent(); rsort($files); $break_limit = 5; foreach ($files as $file) { echo date('Y-m-d H:i:s', $file['timestamp']) . $file['filename'] . PHP_EOL; if ($break_limit < 1) { return; } if ($s->have($file['filename'])) { $data = $s->get($file['filename'], '0-'); file_put_contents("data/{$file['filename']}", $data); chmod("data/{$file['filename']}", 0666); touch("data/{$file['filename']}", $file['timestamp']); sleep(1); } $break_limit -= 1; } }
public function update($filename, $timestamp, $id, $node) { $node = str_replace('+', '/', $node); $client = new Shingetsu_Client($node); // 手持ちのファイルかどうか確認する // 持っていなければ受け取る || 持っていれば差分を取得 if ($client->have($filename)) { $response = $client->get($filename, '-' . time()); } else { $response = $client->get($filename, '-' . time()); } $lines = explode("\n", $response); $parts = explode('<>', end($lines)); file_put_contents('data/' . $filename, $response); $result = chmod("data/{$filename}", 0666); if ($result === false) { error_log('chmod failed:' . $filename); } $result = touch("data/{$filename}", $parts[0]); if ($result === false) { error_log('touch failed:' . $filename); } // ノード名を自分のものに変更して、他のノードに投げる }