'OK', 'url' => 'Welcome to the ShareX PHP Uploader! v' . $SCRIPT_VERSION, // Remove this if you don't want to show the support URL 'support' => "For support, visit - https://git.fascinated.cc/Fascinated/sharex-php-uploader", 'timeTaken' => getTimeTaken() )); die(); } // Check if the token is valid if (!checkSecret($secret)) { returnJson(array( 'status' => 'ERROR', 'url' => 'Invalid or missing upload secret', 'timeTaken' => getTimeTaken() )); logToNginx("An upload was attempted with an invalid secret key: " . $secret); die(); } // Check if the secret is the default one, and if so, tell the user to change it if ($secret == $defaultSecretKey) { returnJson(array( 'status' => 'ERROR', 'url' => 'You need to set your upload secret in the configuration section of the upload.php file', 'timeTaken' => getTimeTaken() )); logToNginx("An upload was attempted with the default secret key"); die(); } // Check if the file was uploaded if (!isset($file)) { returnJson(array( 'status' => 'ERROR', 'url' => 'No file was uploaded', 'timeTaken' => getTimeTaken() )); logToNginx("An upload was attempted without providing a file"); die(); } $originalFileName = preg_replace("/[^A-Za-z0-9_.]/", '', $_FILES["sharex"]["name"]); // Remove unwanted characters $fileType = pathinfo($originalFileName, PATHINFO_EXTENSION); // File extension (e.g. png, jpg, etc.) $fileSize = $_FILES["sharex"]["size"]; // File size in bytes // Check if the file already exists if (file_exists($uploadDir . $originalFileName)) { returnJson(array( 'status' => 'ERROR', 'url' => 'File already exists', 'timeTaken' => getTimeTaken() )); logToNginx("An upload was attempted with a file that already exists: " . $originalFileName); die(); } $finalName = $originalFileName; // The final name of the file if ($useRandomFileNames) { // Generate a random file name if enabled $finalName = generateRandomString($fileNameLength) . "." . $fileType; } $needsToBeSaved = true; // Whether the file needs to be saved // Check the file type and size if ($shouldConvertToWebp && in_array($fileType, ["png", "jpeg", "jpg"]) && $_FILES["sharex"]["size"] > $webpThreadhold) { $image = imagecreatefromstring(file_get_contents($_FILES["sharex"]["tmp_name"])); $webp_file = pathinfo($finalName, PATHINFO_FILENAME) . ".webp"; imagewebp($image, $webp_file, 90); // Convert the image and save it imagedestroy($image); // Free up memory $finalName = $webp_file; $shouldSave = false; $fileSize = filesize($webp_file); // Update the file size } if ($needsToBeSaved) { // Save the file if it has not been saved yet // Move the file to the uploads folder $success = move_uploaded_file($_FILES["sharex"]["tmp_name"], $uploadDir . $finalName); if (!$success) { returnJson(array( 'status' => 'ERROR', 'url' => 'Failed to save file. Check the permissions of the upload directory.', 'timeTaken' => getTimeTaken() )); logToNginx("An upload was attempted but the file could not be saved: " . $finalName); die(); } } returnJson(array( 'status' => 'OK', 'url' => $finalName, 'timeTaken' => getTimeTaken() )); logToNginx("An upload was successful. original id: $originalFileName, final id: $finalName, size: $fileSize"); die(); } catch (Exception $e) { // Handle any errors returnJson(array( 'status' => 'ERROR', 'url' => $e->getMessage(), 'timeTaken' => getTimeTaken() )); logToNginx("An upload was attempted but an error occurred: " . $e->getMessage()); die(); }