. // PHP versions of functions in sched/sched_util.cpp function filename_hash($filename, $fanout) { $m = md5($filename); $s = substr($m, 1, 7); sscanf($s, "%x", $n); return sprintf("%x", $n%$fanout); } function dir_hier_path($filename, $root, $fanout) { $dir = filename_hash($filename, $fanout); $dirpath = "$root/$dir"; if (!is_dir($dirpath)) { if (!mkdir($dirpath)) { echo "failed to mkdir: $dirpath\n"; } } return "$dirpath/$filename"; } function dir_hier_url($filename, $base, $fanout) { $dir = filename_hash($filename, $fanout); return "$base/$dir/$filename"; } // we're about to put a file with the given path into the download hier; // return // 0 if same file is already there and we don't need to copy // 1 if file isn't there, need to copy // -1 if a different file is there // -2 if a file operation failed // // in cases 0 and 1 we make sure a .md5 file is there; create if needed // // Assume that if there's a .md5 file, it's correct. // function check_download_file($path, $dl_path) { $dl_md5_path = "$dl_path.md5"; $have_md5_file = false; $md5 = md5_file($path); if ($md5 === FALSE) { return -2; } $size = filesize($path); if ($size === FALSE) { return -2; } if (file_exists($dl_md5_path)) { $x = file_get_contents($dl_md5_path); if ($x === FALSE) { return -2; } $x = explode(" ", $x); $dl_md5 = $x[0]; $dl_size = $x[1]; $have_md5_file = true; } if (file_exists($dl_path)) { if ($have_md5_file) { $s = filesize($dl_path); if ($s === FALSE) { return -2; } if ($s == $dl_size && $dl_md5 == $md5) { // looks like the right file is there // return 0; } return -1; } else { // missing the .md5 file; need to look at the file // $m = md5_file($dl_path); if ($m === FALSE) { return -2; } if ($m == $md5) { if (file_put_contents($dl_md5_path, "$md5 $size\n") === FALSE) { return -2; } return 0; } return -1; } } else { if (file_put_contents($dl_md5_path, "$md5 $size\n") === FALSE) { return -2; } return 1; } } ?>