74 lines
2.4 KiB
PHP

<?php
// Function to validate and sanitize user inputs
function validateAndSanitizeInput($input) {
return htmlspecialchars(substr(trim($input), 0, 256), ENT_QUOTES, 'UTF-8');
}
// Check if the request is a POST request
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = isset($_POST['name']) ? validateAndSanitizeInput($_POST['name']) : 'Anonymous';
$message = isset($_POST['message']) ? $_POST['message'] : '';
// Your keyword filtering code
$blockedKeywords = array("php", "javascript", "script");
foreach ($blockedKeywords as $keyword) {
if (stripos($message, $keyword) !== false) {
http_response_code(400); // Bad Request
exit('Blocked keyword detected! Your message contains blocked content.');
}
}
// Sanitize the message
$sanitizedMessage = validateAndSanitizeInput($message);
if (!empty($name) && !empty($message)) {
// Use UTC time for the timestamp
date_default_timezone_set('UTC');
$newMessage = '[' . date('d-M-Y H:i:s') . '] ' . $name . ': ' . $sanitizedMessage . PHP_EOL;
// Open the chat log file for appending
$filename = 'chatlog.txt';
// Ensure the file path is safe (optional: use a specific directory)
$safePath = './' . basename($filename);
// Read the current messages and count them
$fileContent = file_get_contents($filename);
// Split file content into an array of messages
$lines = explode(PHP_EOL, $fileContent);
// If there are more than 50 messages, remove the oldest ones
if (count($lines) >= 50) {
// Trim the oldest messages, keeping only the latest 49 messages
$lines = array_slice($lines, -49);
}
// Write the new message to the file
file_put_contents($filename, implode(PHP_EOL, $lines) . PHP_EOL . $newMessage);
// Return a success response
http_response_code(200);
exit('Message saved successfully.');
} else {
// Invalid input, return an error response
http_response_code(400);
exit('Invalid input data.');
}
} else {
// Handle GET requests (fetching chat messages)
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
$filename = 'chatlog.txt';
if (file_exists($filename)) {
// Read the chat log file and send its content as the response
readfile($filename);
} else {
// Return an empty response if the chat log file doesn't exist
http_response_code(200);
exit('');
}
}
}
?>