Exemple #1
0
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;
    }
}
Exemple #2
0
 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);
     }
     // ノード名を自分のものに変更して、他のノードに投げる
 }