PHP/JavaScript Uploader
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.
 
 
 
uploads/upload.php

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.']]);
}