2023-04-09 11:58:09 +01:00
|
|
|
<?php
|
|
|
|
$before = microtime(true); // Start time of the script
|
|
|
|
error_reporting(E_ERROR); // Hide PHP errors
|
2023-04-09 12:21:39 +01:00
|
|
|
header('Content-type:application/json;charset=utf-8'); // Set the content type to JSON
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Configuration
|
|
|
|
*/
|
2023-04-09 11:58:09 +01:00
|
|
|
$tokens = array("set me"); // Your secret keys
|
2023-04-09 12:04:17 +01:00
|
|
|
$uploadDir = "./"; // The upload directory
|
2023-04-09 12:17:17 +01:00
|
|
|
$useRandomFileNames = false; // Use random file names instead of the original file name
|
|
|
|
$fileNameLength = 8; // The length of the random file name
|
2023-04-09 16:51:05 +01:00
|
|
|
$webpThreadhold = 1048576; // The minimum file size for converting to webp (in bytes)
|
2023-04-09 11:58:09 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Check if the token is valid
|
|
|
|
*/
|
2023-04-09 12:21:39 +01:00
|
|
|
function checkToken($token): bool {
|
2023-04-09 11:58:09 +01:00
|
|
|
global $tokens;
|
2023-04-09 12:21:39 +01:00
|
|
|
return isset($token) && in_array($token, $tokens);
|
2023-04-09 11:58:09 +01:00
|
|
|
}
|
|
|
|
|
2023-04-09 12:17:17 +01:00
|
|
|
/**
|
|
|
|
* Generate a random string
|
|
|
|
*/
|
2023-04-09 12:21:39 +01:00
|
|
|
function generateRandomString($length = 10): string {
|
2023-04-09 12:17:17 +01:00
|
|
|
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
|
|
$charactersLength = strlen($characters);
|
|
|
|
$randomString = '';
|
|
|
|
for ($i = 0; $i < $length; $i++) {
|
|
|
|
$randomString .= $characters[rand(0, $charactersLength - 1)];
|
|
|
|
}
|
|
|
|
return $randomString;
|
|
|
|
}
|
|
|
|
|
2023-04-09 11:58:09 +01:00
|
|
|
/**
|
|
|
|
* Return a JSON response
|
|
|
|
*/
|
2023-04-09 12:24:47 +01:00
|
|
|
function returnJson($status, $message, $timeTaken = null): void {
|
2023-04-09 12:21:39 +01:00
|
|
|
$json = array('status' => $status, 'url' => $message, 'processingTime' => round($timeTaken ?? 0, 2) . "ms");
|
2023-04-09 11:58:09 +01:00
|
|
|
echo(json_encode($json));
|
|
|
|
die();
|
|
|
|
}
|
|
|
|
|
2023-04-09 12:21:39 +01:00
|
|
|
try {
|
|
|
|
$token = $_POST['secret']; // The provided secret key
|
|
|
|
$file = $_FILES['sharex']; // The uploaded file
|
2023-04-09 11:58:09 +01:00
|
|
|
|
2023-04-09 12:21:39 +01:00
|
|
|
// Check if the token is valid
|
|
|
|
if (!checkToken($token)) {
|
|
|
|
$timeTaken = microtime(true) - $before;
|
|
|
|
returnJson('ERROR', 'Invalid or missing secret key', $timeTaken);
|
|
|
|
die();
|
|
|
|
}
|
2023-04-09 11:58:09 +01:00
|
|
|
|
2023-04-09 12:21:39 +01:00
|
|
|
// Check if the file was uploaded
|
|
|
|
if (!isset($file)) {
|
|
|
|
$timeTaken = microtime(true) - $before;
|
|
|
|
returnJson('ERROR', 'No file was uploaded', $timeTaken);
|
|
|
|
die();
|
|
|
|
}
|
2023-04-09 11:58:09 +01:00
|
|
|
|
2023-04-09 16:51:05 +01:00
|
|
|
$target_file = preg_replace("/[^A-Za-z0-9_.]/", '', $_FILES["sharex"]["name"]); // Remove unwanted characters
|
2023-04-09 12:21:39 +01:00
|
|
|
$fileType = pathinfo($target_file, PATHINFO_EXTENSION); // File extension (e.g. png, jpg, etc.)
|
2023-04-09 11:58:09 +01:00
|
|
|
|
2023-04-09 12:21:39 +01:00
|
|
|
// Check if the file already exists
|
|
|
|
if (file_exists($uploadDir . $target_file)) {
|
|
|
|
$timeTaken = microtime(true) - $before;
|
|
|
|
returnJson('ERROR', 'File already exists', $timeTaken);
|
|
|
|
die();
|
|
|
|
}
|
2023-04-09 12:05:53 +01:00
|
|
|
|
2023-04-09 12:21:39 +01:00
|
|
|
$shouldSave = true; // Whether or not the file should be saved
|
|
|
|
$finalName = $target_file; // The final name of the file
|
|
|
|
if ($useRandomFileNames) { // Generate a random file name if enabled
|
|
|
|
$finalName = generateRandomString($fileNameLength) . "." . $fileType;
|
|
|
|
}
|
2023-04-09 12:17:17 +01:00
|
|
|
|
2023-04-09 12:21:39 +01:00
|
|
|
// Convert the image to webp if applicable
|
2023-04-09 16:51:05 +01:00
|
|
|
if (in_array($fileType, array("png", "jpeg", "jpg")) && $_FILES["sharex"]["size"] > $webpThreadhold) {
|
2023-04-09 12:21:39 +01:00
|
|
|
$image = imagecreatefromstring(file_get_contents($_FILES["sharex"]["tmp_name"]));
|
|
|
|
$webp_file = pathinfo($finalName, PATHINFO_FILENAME) . ".webp";
|
2023-04-09 12:24:47 +01:00
|
|
|
imagewebp($image, $webp_file, 90); // Convert the image and save it
|
|
|
|
imagedestroy($image); // Free up memory
|
2023-04-09 12:21:39 +01:00
|
|
|
$finalName = $webp_file;
|
|
|
|
$shouldSave = false;
|
|
|
|
}
|
2023-04-09 11:58:09 +01:00
|
|
|
|
2023-04-09 12:21:39 +01:00
|
|
|
if ($shouldSave) {
|
|
|
|
// Move the file to the uploads folder
|
|
|
|
if (move_uploaded_file($_FILES["sharex"]["tmp_name"], $uploadDir . $finalName)) {
|
|
|
|
$timeTaken = microtime(true) - $before;
|
|
|
|
returnJson('OK', $finalName, $timeTaken);
|
|
|
|
} else {
|
|
|
|
$timeTaken = microtime(true) - $before;
|
2023-04-09 12:22:39 +01:00
|
|
|
returnJson('ERROR', 'File upload failed. Does the upload folder exist and did you CHMOD the folder?', $timeTaken);
|
2023-04-09 12:21:39 +01:00
|
|
|
}
|
|
|
|
die();
|
2023-04-09 12:17:17 +01:00
|
|
|
}
|
2023-04-09 12:21:39 +01:00
|
|
|
returnJson('OK', $finalName, $timeTaken);
|
2023-04-09 12:22:39 +01:00
|
|
|
} catch (Exception $e) { // Handle any errors
|
2023-04-09 12:21:39 +01:00
|
|
|
$timeTaken = microtime(true) - $before;
|
|
|
|
returnJson('ERROR', $e->getMessage(), $timeTaken);
|
2023-04-09 12:17:17 +01:00
|
|
|
die();
|
2023-04-09 11:58:09 +01:00
|
|
|
}
|
|
|
|
?>
|