Exemple #1
0
 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";
             }
         }
     }