Create index.php
This commit is contained in:
parent
eff01fe4c5
commit
bd9221bba7
1 changed files with 328 additions and 0 deletions
328
index.php
Normal file
328
index.php
Normal file
|
@ -0,0 +1,328 @@
|
|||
<?php
|
||||
|
||||
date_default_timezone_set('America/Chicago');
|
||||
|
||||
function logMessage($message)
|
||||
{
|
||||
$logFile = __DIR__ . '/logfile.log';
|
||||
if (!file_exists($logFile)) {
|
||||
touch($logFile);
|
||||
chmod($logFile, 0666); // Sets RW permissions for everyone
|
||||
chown($logFile, 'www-data');
|
||||
}
|
||||
// Format the log message with a timestamp
|
||||
$logMessage = ('Log Entry [' . date('Y-m-d H:i:s') . '] ' . $message) . PHP_EOL;
|
||||
// Append the log message to the log file
|
||||
file_put_contents($logFile, $logMessage, FILE_APPEND);
|
||||
}
|
||||
|
||||
logMessage("New Convert!");
|
||||
|
||||
// Response echo
|
||||
$resp = '';
|
||||
|
||||
$directories = ['uploads/', 'converted/', 'zips/']; // Array of directories
|
||||
$owner = 'www-data';
|
||||
$permissions = 0755; // Octal representation of 755
|
||||
|
||||
// Function to create and set permissions for directories
|
||||
function createDirectory($directory, $owner, $permissions) {
|
||||
try {
|
||||
mkdir($directory, $permissions, true); // Recursive creation
|
||||
logMessage("Directory $directory created!");
|
||||
chown($directory, $owner);
|
||||
logMessage("Ownership of $directory changed to $owner");
|
||||
} catch (Exception $e) {
|
||||
logMessage("Error creating/modifying $directory: " . $e->getMessage());
|
||||
header("Location: error.php?error=" . urlencode("System Error On Page Load"));
|
||||
}
|
||||
}
|
||||
|
||||
// Iterate over the array and create directories if needed
|
||||
foreach ($directories as $directory) {
|
||||
if (!file_exists($directory)) {
|
||||
createDirectory($directory, $owner, $permissions);
|
||||
logMessage("$directory does not exist! Making it now!");
|
||||
}
|
||||
}
|
||||
|
||||
// Function to clean up old zip files
|
||||
function cleanupZipFiles($zip_dir) {
|
||||
$files = glob($zip_dir . "*.zip");
|
||||
$now = time();
|
||||
$one_minute_ago = $now - 60; // 60 seconds = 1 minute
|
||||
|
||||
foreach ($files as $file) {
|
||||
if (filemtime($file) < $one_minute_ago) {
|
||||
unlink($file);
|
||||
logMessage("Removed old zip file: " . $file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Call the cleanup function at the start of the script
|
||||
$zip_dir = 'zips/'; // Assuming this is your zip directory
|
||||
|
||||
global $zip_dir;
|
||||
global $upload_dir;
|
||||
global $converted_dir;
|
||||
global $allowed_formats;
|
||||
|
||||
$zip_dir='zips/';
|
||||
$upload_dir='uploads/';
|
||||
$converted_dir='converted/';
|
||||
|
||||
function purgeOldZipFiles() {
|
||||
logMessage("Purging Old Zips from the Server!");
|
||||
|
||||
$directory = '/var/www/html/convert/zips/';
|
||||
$maxAgeMinutes = 15;
|
||||
$now = time();
|
||||
|
||||
// Get all files in the directory
|
||||
$files = scandir($directory);
|
||||
|
||||
// Iterate through the files
|
||||
foreach ($files as $file) {
|
||||
// Skip "." and ".."
|
||||
if ($file == '.' || $file == '..') {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check if it's a zip file
|
||||
if (substr($file, -4) == '.zip') {
|
||||
$filePath = $directory . $file;
|
||||
|
||||
// Get the last modification time of the file
|
||||
$lastModified = filemtime($filePath);
|
||||
|
||||
// Check if it's older than the specified max age
|
||||
if ($now - $lastModified > $maxAgeMinutes * 60) {
|
||||
// Delete the file
|
||||
unlink($filePath);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Call the function when index.php loads
|
||||
purgeOldZipFiles();
|
||||
|
||||
|
||||
$user_files = [];
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$resp = '';
|
||||
$format = $_POST['format'];
|
||||
logMessage("In POST");
|
||||
|
||||
ob_start(); // Start output buffering
|
||||
|
||||
logMessage("Creating new zip file");
|
||||
$zip = new ZipArchive();
|
||||
$zip_path = 'zips/' . time() . '.zip'; // Full path to the zip file
|
||||
|
||||
if ($zip->open($zip_path, ZipArchive::CREATE) !== TRUE) {
|
||||
header("Location: error.php?error=" . urlencode("Zip Creation Failed!"));
|
||||
}
|
||||
|
||||
foreach ($_FILES['images']['tmp_name'] as $key => $tmp_name) {
|
||||
logMessage("In foreach loop processing images!");
|
||||
$uploadedFile = [
|
||||
'name' => $_FILES['images']['name'][$key],
|
||||
'type' => $_FILES['images']['type'][$key],
|
||||
'tmp_name' => $_FILES['images']['tmp_name'][$key],
|
||||
'error' => $_FILES['images']['error'][$key],
|
||||
'size' => $_FILES['images']['size'][$key]
|
||||
];
|
||||
|
||||
$file_name = $uploadedFile['name'];
|
||||
$file_tmp = $uploadedFile['tmp_name'];
|
||||
|
||||
$allowed_formats = ['jpg', 'png', 'bmp', 'gif', 'ico'];
|
||||
$fileExtension = strtolower(pathinfo($uploadedFile['name'], PATHINFO_EXTENSION));
|
||||
if (!in_array($fileExtension, $allowed_formats)) {
|
||||
logMessage("File type not allowed!");
|
||||
header("Location: error.php?error=" . urlencode("File Type Not Allowed For " . $fileExtension));
|
||||
}
|
||||
|
||||
// Validate file
|
||||
if (!is_uploaded_file($file_tmp)) {
|
||||
logMessage("Error uploading file! " . $file_tmp);
|
||||
header("Location: error.php?error=" . urlencode("File Upload Failed For " . $file_tmp));
|
||||
}
|
||||
|
||||
// Validate image
|
||||
if (!getimagesize($file_tmp)) {
|
||||
logMessage("Invalid image file! " . $file_tmp);
|
||||
header("Location: error.php?error=" . urlencode("Invalid Image File " . $file_tmp));
|
||||
}
|
||||
|
||||
// Error handling for adding files to zip
|
||||
|
||||
// Move uploaded file to upload directory
|
||||
move_uploaded_file($file_tmp, $upload_dir.$file_name);
|
||||
logMessage("Moved uploaded file!");
|
||||
|
||||
// Convert image and save to converted directory
|
||||
convertImage($upload_dir.$file_name, $converted_dir.pathinfo($file_name, PATHINFO_FILENAME) . '.' . $format, $format);
|
||||
logMessage("Converted image to new format!");
|
||||
// Add converted image to zip
|
||||
$local_file_name = pathinfo($file_name, PATHINFO_FILENAME) . '.' . $format; // Construct local file name
|
||||
$zip->addFile($converted_dir . $local_file_name, $local_file_name); // Add with local name
|
||||
logMessage("Image added to zip file!");
|
||||
|
||||
// Add uploaded and converted files to user files array
|
||||
array_push($user_files, $upload_dir.$file_name);
|
||||
array_push($user_files, $converted_dir.pathinfo($file_name, PATHINFO_FILENAME) . '.' . $format);
|
||||
}
|
||||
|
||||
// Close the zip file after all files have been added
|
||||
$zip->close();
|
||||
|
||||
// Construct the download button HTML in $resp
|
||||
$resp .= '<button data-href="download.php?file=' . urlencode($zip_path) . '" id="downloadButton" class="button-class flex flex-wrap justify-center p-4 bg-blue-500 text-white rounded-md transform transition duration-500 ease-in-out hover:scale-105">Download ZIP file</button>';
|
||||
ob_end_clean();
|
||||
cleanupFiles($user_files);
|
||||
logMessage("Removing users files from server!");
|
||||
}
|
||||
|
||||
function convertImage($source, $destination, $format) {
|
||||
$allowedFormats = ['jpg', 'jpeg', 'png', 'gif', 'bmp'];
|
||||
$imageInfo = getimagesize($source);
|
||||
global $allowed_formats;
|
||||
|
||||
if (!$imageInfo) {
|
||||
header("Location: error.php?error=" . urlencode("Invalid image file: " . $source));
|
||||
exit;
|
||||
}
|
||||
|
||||
$originalFormat = strtolower($imageInfo[2]);
|
||||
$originalFormat = image_type_to_extension($originalFormat, false);
|
||||
|
||||
if (!in_array($originalFormat, $allowedFormats)) {
|
||||
header("Location: error.php?error=" . urlencode("Unsupported image format: " . $originalFormat));
|
||||
exit;
|
||||
}
|
||||
|
||||
if (!in_array($format, $allowedFormats)) {
|
||||
header("Location: error.php?error=" . urlencode("Invalid target format: " . $format));
|
||||
exit;
|
||||
}
|
||||
|
||||
try {
|
||||
$image = new Imagick($source);
|
||||
$image->setImageFormat($format);
|
||||
file_put_contents($destination, $image);
|
||||
logMessage("Image converted from $originalFormat to $format!");
|
||||
} catch (ImagickException $e) {
|
||||
header("Location: error.php?error=" . urlencode("Error converting image: " . $e->getMessage()));
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
function cleanupFiles($files) {
|
||||
foreach ($files as $file) {
|
||||
unlink($file);
|
||||
logMessage("Removed file " . $file);
|
||||
}
|
||||
logMessage("Source files deleted!");
|
||||
}
|
||||
?>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<script defer src="https://umami.spindlecrank.com/script.js" data-website-id="c78b165b-efb2-48d4-b67d-a457db6e4ad9"></script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
||||
<link rel="manifest" href="/site.webmanifest">
|
||||
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5">
|
||||
<meta name="msapplication-TileColor" content="#da532c">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
<meta name="google-site-verification" content="gu3duYB5OEsqTehyFOA1M1OOzJ--AfbTsk4dt_CVJTU" />
|
||||
<title>Image Converter</title>
|
||||
<meta name="description" content="Welcome to Image Format Converter! Convert your images to different formats quickly and easily.">
|
||||
<meta name="keywords" content="Image Converter, Spindlecrank, JPG, PNG, BMP, GIF, ICO">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css">
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<style>
|
||||
@keyframes bounce {
|
||||
0%, 100% {
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: translateY(-10px);
|
||||
}
|
||||
}
|
||||
|
||||
#waiting {
|
||||
display: none;
|
||||
font-size: 1.5em;
|
||||
font-weight: bold;
|
||||
color: white;
|
||||
animation: bounce 1s infinite;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-blue-500 flex flex-col items-center justify-center min-h-screen w-3/4 sm:w-3/4 md:w-3/4 lg:w-1/2 xl:w-1/2 2xl:w-1/2 mx-auto">
|
||||
<div>
|
||||
<div class="shadow-lg p-6 bg-indigo-500 rounded-lg flex flex-col items-center">
|
||||
<h1 class="text-m sm:text-l md:text-xl lg:text-xl xl:text-xl text-white font-bold mb-3 animate__animated animate__rubberBand">Welcome to the Image Format Converter</h1>
|
||||
<h3 class="text-s sm:text-m md:text-m lg:text-m xl:text-m text-white font-bold mb-2">Currently converts BMP, JPG, PNG, GIF, and ICO Images.</h3>
|
||||
<div id="form-div" class="shadow-lg rounded-lg bg-white p-4 flex flex-col items-left space-y-4">
|
||||
<form id="convertForm" method="POST" enctype="multipart/form-data">
|
||||
<label class="block mb-2">Select up to 10 images:</label>
|
||||
<input type="file" name="images[]" accept="image/*" multiple required class="border p-2 mb-2 w-full">
|
||||
<label class="block mb-2">Select format to convert to:</label>
|
||||
<select name="format" required class="border p-2 mb-2 w-full">
|
||||
<option value="">>--Please choose an option--<</option>
|
||||
<option value="jpg">JPG</option>
|
||||
<option value="png">PNG</option>
|
||||
<option value="bmp">BMP</option>
|
||||
<option value="gif">GIF</option>
|
||||
<option value="ico">ICO</option>
|
||||
</select>
|
||||
<button id="submit" type="submit" class="bg-blue-500 text-white px-4 py-2 rounded">Convert</button>
|
||||
</form>
|
||||
</div>
|
||||
<div id="result" class="ml-1 mr-6 mb-6 mt-6 flex flex-col items-center w-full"><?php echo $resp; ?></div>
|
||||
<div id="waiting" class="ml-1 mr-6 mb-6 mt-6 flex flex-col items-center text-center w-full"></div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
document.getElementById('submit').addEventListener('click', function(e) {
|
||||
var waitingDiv = document.getElementById('waiting');
|
||||
var resultDiv = document.getElementById('result');
|
||||
waitingDiv.innerHTML = "Converting Files!";
|
||||
waitingDiv.style.display = 'block'; // Display the waiting message
|
||||
|
||||
var checkResult = setInterval(function() {
|
||||
if (resultDiv.innerHTML.trim() !== "") {
|
||||
waitingDiv.style.display = 'none'; // Hide the waiting message
|
||||
resultDiv.style.display = 'block';
|
||||
clearInterval(checkResult);
|
||||
}
|
||||
}, 1000); // checks every second
|
||||
});
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const form = document.getElementById('convertForm');
|
||||
const dButton = document.getElementById('downloadButton');
|
||||
const fileInput = document.getElementById('images');
|
||||
|
||||
dButton.addEventListener('click', function(event) { // Added event parameter
|
||||
window.location.href = event.target.getAttribute('data-href');
|
||||
var resultDiv = document.getElementById('result');
|
||||
resultDiv.innerHTML = "";
|
||||
const formData = new FormData(form);
|
||||
formData.delete('images[]');
|
||||
form.reset();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in a new issue