You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
3.2 KiB
84 lines
3.2 KiB
<?php
|
|
// Upload Directory
|
|
$uploadDir = 'uploads/';
|
|
$maxFileSize = 5 * 1024 * 1024; // 5MB in bytes
|
|
$validTypes = ['jpg', 'jpeg', 'png', 'gif']; // Note .SVG is dangerious
|
|
$a_crops = [
|
|
['name'=>'half', 'width'=>0, 'height'=>0, 'crop'=>false],
|
|
['name'=>'hd', 'width'=>1920, 'height'=>1080, 'crop'=>false],
|
|
['name'=>'thumbnail', 'width'=>300, 'height'=>300, 'crop'=>false],
|
|
//['name'=>'crop', 'width'=>300, 'height'=>300, 'crop'=>true],
|
|
];
|
|
// Set the quality (0-100)
|
|
$JPEG_quality = 75; // Adjust this value as needed
|
|
// Set the compression level (0-9)
|
|
$PNG_compression = 9; // Adjust this value as needed
|
|
$GIF_number_of_colors = 128; // Adjust number of Colors as needed
|
|
|
|
/**
|
|
* nano /etc/php/8.3/apache2/php.ini
|
|
* edit php.ini for the following:
|
|
*/
|
|
ini_set('upload_max_filesize', '6M'); // Adjust upload limits
|
|
ini_set('post_max_size', '6M');
|
|
ini_set('max_file_uploads', '15');
|
|
ini_set('max_execution_time', '90'); // 90 seconds = 1.5 minutes
|
|
ini_set('max_input_time', '90'); // 1.5 minutes
|
|
|
|
require_once "image_compression.php";
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
if (isset($_FILES['files'])) {
|
|
$files = $_FILES['files'];
|
|
$responses = [];
|
|
|
|
// Ensure the uploads directory exists
|
|
if (!is_dir($uploadDir)) {
|
|
mkdir($uploadDir, 0775, true);
|
|
}
|
|
|
|
for ($i = 0; $i < count($files['name']); $i++) {
|
|
$fileName = basename($files['name'][$i]);
|
|
$fileTmpName = $files['tmp_name'][$i];
|
|
$fileSize = $files['size'][$i];
|
|
$fileType = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
|
|
$uploadFile = $uploadDir . $fileName;
|
|
|
|
// Validate file type (only images allowed)
|
|
if (!in_array($fileType, $validTypes)) {
|
|
$responses[] = ['status' => 'error', 'message' => "Invalid file type for {$fileName}. Only images are allowed."];
|
|
@unlink($fileTmpName);
|
|
continue;
|
|
}
|
|
|
|
// Validate file size (limit to 5MB)
|
|
if ($fileSize > $maxFileSize) {
|
|
$responses[] = ['status' => 'error', 'message' => "File size for $fileName exceeds the limit of 5MB."];
|
|
@unlink($fileTmpName);
|
|
continue;
|
|
}
|
|
|
|
// Move the uploaded file to the server
|
|
if (move_uploaded_file($fileTmpName, $uploadFile)) {
|
|
$compressed_files = image_compression($uploadFile, $fileName, $GLOBALS['a_crops']);
|
|
if (count($compressed_files)) {
|
|
$responses[] = ['status' => 'success', 'message' => "$fileName"];
|
|
foreach($compressed_files as $file) {
|
|
$save_to_DB = $uploadDir . $file;
|
|
// HANDLE $save_to_DB to save to Database
|
|
}
|
|
} else {
|
|
$responses[] = ['status' => 'error', 'message' => "Failed to Scale image$fileName."];
|
|
}
|
|
} else {
|
|
$responses[] = ['status' => 'error', 'message' => "Failed to upload $fileName."];
|
|
}
|
|
}
|
|
|
|
echo json_encode($responses);
|
|
} else {
|
|
echo json_encode([['status' => 'error', 'message' => 'No files were uploaded.']]);
|
|
}
|
|
} else {
|
|
echo json_encode([['status' => 'error', 'message' => 'Invalid request method.']]);
|
|
}
|
|
|