download.php 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. <?php
  2. requirePHPLib('judger');
  3. if (!authenticateJudger()) {
  4. become404Page();
  5. }
  6. switch ($_GET['type']) {
  7. case 'submission':
  8. $file_name = UOJContext::storagePath()."/submission/{$_GET['id']}/{$_GET['rand_str_id']}";
  9. $download_name = "submission.zip";
  10. break;
  11. case 'tmp':
  12. $file_name = UOJContext::storagePath()."/tmp/{$_GET['rand_str_id']}";
  13. $download_name = "tmp";
  14. break;
  15. case 'problem':
  16. $id = $_GET['id'];
  17. if (!validateUInt($id) || !($problem = queryProblemBrief($id))) {
  18. become404Page();
  19. }
  20. $file_name = "/var/uoj_data/$id.zip";
  21. $download_name = "$id.zip";
  22. break;
  23. case 'judger':
  24. $file_name = UOJContext::storagePath()."/judge_client.zip";
  25. $download_name = "judge_client.zip";
  26. break;
  27. default:
  28. become404Page();
  29. }
  30. $finfo = finfo_open(FILEINFO_MIME);
  31. $mimetype = finfo_file($finfo, $file_name);
  32. if ($mimetype === false) {
  33. become404Page();
  34. }
  35. finfo_close($finfo);
  36. header("X-Sendfile: $file_name");
  37. header("Content-type: $mimetype");
  38. header("Content-Disposition: attachment; filename=$download_name");
  39. ?>