function receiveFileFragments($F) { extract($F); $filekey_valid = check_filekey_validity($filekey, $db); if ($filekey_valid) { #Get the information about the file from the table $file_id = get_entry("file_transfer", "file_id", "filekey", $filekey, $db); $filesize = get_entry("file_transfer", "filesize", "filekey", $filekey, $db); $originalname = get_entry("file_transfer", "filename", "filekey", $filekey, $db); #list($name, $extension) = explode('.', $originalname); ereg('([A-Za-z0-9]+)\\.*([A-Za-z0-9]*)$', $originalname, $tokens); $name = $tokens[1]; $extension = $tokens[2]; #$name = ereg_replace('.([A-Za-z0-9]*)$', '', $originalname); if ($fragNr == '') { $fragNr = $_REQUEST['fragNr']; } list($thisfrag, $totalfrag) = explode('/', $fragNr); #Define the folder where these files will be stored $folder = $GLOBALS['s3db_info']['server']['db']['uploads_folder'] . $GLOBALS['s3db_info']['server']['db']['uploads_file'] . '/tmps3db/'; $filename = $folder . $file_id . '_' . $thisfrag . '.tmp'; $final = $folder . $file_id . '.' . $extension; if ($fileStr == '') { $fileStr = $_REQUEST['fileStr']; } #decode the fragment right after receiving them if they were encoded one at a time if ($_REQUEST['encode'] == '2') { $fileStr = base64_decode($fileStr); } $indname = $folder . 'ind' . $file_id . '.txt'; $fid = fopen($filename, 'a+'); chmod($filename, 0777); if ($fragNr == '' || $fileStr == '') { echo "<report>Syntax: <BR>"; echo "<filekey>...</filekey><BR>"; echo "<fragNr>[this frag]/[total nr of frags]</fragNr><BR>"; echo "<fileStr>(hexadecimal encoded fragment string)</fileStr><BR>"; echo "</report>"; } else { if ($filesize != '' && filesize($filename) == $filesize) { echo "<report>This file was already uploaded</report>"; } elseif ($thisfrag > $totalfrag) { echo "<report>Too many fragments</report>"; } else { $F = compact('thisfrag', 'fileStr', 'totalfrag', 'fid', 'filename', 'indname', 'final'); #echo '<pre>';print_r($F); echo put_the_frag_on_file($F); #echo $thisfrag.' out of'.$totalfrag; #When the last fragment is in, decode the entire file if ($thisfrag == $totalfrag) { #find all the fragment files in the folder, write them in the final file for ($i = 1; $i <= $totalfrag; $i++) { $fragment_file_name = $folder . $file_id . '_' . $i . '.tmp'; if (is_file($fragment_file_name)) { if (file_put_contents($folder . $file_id . '.tmp', file_get_contents($fragment_file_name), FILE_APPEND)) { unlink($fragment_file_name); } } else { return "Fragment " . $i . " is missing, please upload it again."; exit; } } #decode the file in the end, if the user requested it if ($_REQUEST['encode'] != '2') { $fullStr = file_get_contents($folder . $file_id . '.tmp'); $decodedStr = base64_decode($fullStr); if (!file_put_contents($folder . $file_id . '.tmp', $decodedStr)) { echo "Failed accepting the file. Please try again or encode file one fragment at a time before sending."; exit; } } copy($folder . $file_id . '.tmp', $final); chmod($final, 0777); if (is_file($folder . $file_id . '.tmp')) { unlink($folder . $file_id . '.tmp'); } return "<report>Upload Complete</report>"; } else { fclose($fid); } } } } }
#include_once (S3DB_SERVER_ROOT.'/s3dbcore/callback.php'); if (!$filekey) { $filekey = $_REQUEST['filekey']; } if ($filekey == '') { echo $message . 'A Key to enter S3DB is missing.'; } elseif ($filekey != '') { $db = CreateObject('s3dbapi.db'); $db->Halt_On_Error = 'no'; $db->Host = $GLOBALS['s3db_info']['server']['db']['db_host']; $db->Type = $GLOBALS['s3db_info']['server']['db']['db_type']; $db->Database = $GLOBALS['s3db_info']['server']['db']['db_name']; $db->User = $GLOBALS['s3db_info']['server']['db']['db_user']; $db->Password = $GLOBALS['s3db_info']['server']['db']['db_pass']; $db->connect(); $filekey_valid = check_filekey_validity($filekey, $db); #Delete all expired file_ids delete_expired_file_ids(date('Y-m-d G:i:s'), $db); if (!$filekey_valid) { echo "Filekey is not valid"; exit; } else { include_once S3DB_SERVER_ROOT . '/s3dbcore/uid_resolve.php'; #include (S3DB_SERVER_ROOT.'/s3dbcore/list_elements.php'); include S3DB_SERVER_ROOT . '/s3dbcore/element_info.php'; include S3DB_SERVER_ROOT . '/s3dbcore/SQL.php'; include S3DB_SERVER_ROOT . '/s3dbcore/validation_engine.php'; include S3DB_SERVER_ROOT . '/s3dbcore/insert_entries.php'; #include (S3DB_SERVER_ROOT.'/s3dbcore/project_folder.php'); include S3DB_SERVER_ROOT . '/s3dbcore/display.php'; #include (S3DB_SERVER_ROOT.'/s3dbcore/search_resource.php');