private static function add_file_callback($id, $new_file, $filename) { $CI =& get_instance(); $hash = md5_file($new_file); $storage_id = null; $query = $CI->db->select('id, hash')->from('file_storage')->where('hash', $hash)->get()->result_array(); foreach ($query as $row) { $data_id = implode("-", array($row['hash'], $row['id'])); $old_file = $CI->mfile->file($data_id); // TODO: set $new_file if (files_are_equal($old_file, $new_file)) { $storage_id = $row["id"]; break; } } if ($storage_id === null) { $filesize = filesize($new_file); $mimetype = mimetype($new_file); $CI->db->insert("file_storage", array("filesize" => $filesize, "mimetype" => $mimetype, "hash" => $hash, "date" => time())); $storage_id = $CI->db->insert_id(); } $data_id = $hash . "-" . $storage_id; // TODO: all this doesn't have to run if the file exists. updating the mtime would be enough // that would also be better for COW filesystems $dir = $CI->mfile->folder($data_id); file_exists($dir) || mkdir($dir); $new_path = $CI->mfile->file($data_id); $dest = new \service\storage($new_path); $tmpfile = $dest->begin(); rename($new_file, $tmpfile); $dest->commit(); $CI->mfile->add_file($id, $filename, $storage_id); }
} else { for ($i = 0; $i < 5; $i++) { $final[$i] = ""; exec("timeout 0.1s sh run.sh " . $b . ".cpp.out " . $testcase_i[$i], $output, $status); foreach ($output as $line) { $final[$i] .= "{$line}\n"; } $output = ""; if ($status == 124) { $response["testcase" . $i] = "Failed"; $response["error"] = true; $response["message"] = "Timed Out"; } else { $fileName = $b . "Output.txt"; file_put_contents($fileName, $final[$i]); if (files_are_equal($fileName, $testcase_o[$i])) { if ($response["error"] == true) { $response["error"] = true; echo $fileName; } else { $response["error"] = false; } $response["testcase" . $i] = "Passed"; $response["message"] = "Success"; } else { $response["testcase" . $i] = "Failed"; $response["error"] = true; $response["message"] = "Failure"; } } }