<?php
// includes/config.php
define('DB_HOST', 'localhost');
define('DB_NAME', 'pastebin_clone');
define('DB_USER', 'root');
define('DB_PASS', '');
define('BASE_URL', 'http://localhost/pastebin-clone');
define('SITE_NAME', 'PasteBin Clone');
// includes/database.php
class Database {
private $host = DB_HOST;
private $dbname = DB_NAME;
private $username = DB_USER;
private $password = DB_PASS;
private $pdo;
public function connect() {
if ($this->pdo === null) {
try {
$dsn = "mysql:host=" . $this->host . ";dbname=" . $this->dbname . ";charset=utf8mb4";
$this->pdo = new PDO($dsn, $this->username, $this->password, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false
]);
} catch (PDOException $e) {
throw new Exception("Database connection failed: " . $e->getMessage());
}
}
return $this->pdo;
}
}
// includes/functions.php
function generatePasteId($length = 8) {
$characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$id = '';
for ($i = 0; $i < $length; $i++) {
$id .= $characters[rand(0, strlen($characters) - 1)];
}
return $id;
}
function timeAgo($datetime) {
$time = time() - strtotime($datetime);
if ($time < 60) return 'just now';
if ($time < 3600) return floor($time/60) . ' minutes ago';
if ($time < 86400) return floor($time/3600) . ' hours ago';
if ($time < 2592000) return floor($time/86400) . ' days ago';
if ($time < 31536000) return floor($time/2592000) . ' months ago';
return floor($time/31536000) . ' years ago';
}
function sanitizeOutput($string) {
return htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
}
function getClientIP() {
$ipkeys = ['HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR'];
foreach ($ipkeys as $key) {
if (array_key_exists($key, $_SERVER) === true) {
foreach (explode(',', $_SERVER[$key]) as $ip) {
$ip = trim($ip);
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) {
return $ip;
}
}
}
}
return $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
}
PHP
2,520 characters