File " config.php"
Full path: /home/saratextiles/public_html/app/ config.php
File size: 6.13 KB
MIME-type: text/x-php
Charset: utf-8
Download Open Edit Advanced Editor Back
<?php
/**
* Redirect Rotation Manager - Configuration
* Qanas - Professional Redirect System
*/
// Error reporting for debugging
error_reporting(E_ALL);
ini_set('display_errors', '1');
// Start session BEFORE any output
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
// ========================
// SETTINGS
// ========================
define('ADMIN_PASSWORD', 'qanas2026'); // Change this password
// Paths
$baseDir = dirname(__FILE__);
define('DATA_DIR', $baseDir . '/data/');
define('LINKS_FILE', DATA_DIR . 'links.json');
define('STATS_FILE', DATA_DIR . 'stats.json');
define('SETTINGS_FILE', DATA_DIR . 'settings.json');
// Ensure data directory exists
if (!is_dir(DATA_DIR)) {
@mkdir(DATA_DIR, 0755, true);
}
// ========================
// HELPER FUNCTIONS
// ========================
function loadJson($file, $default = array()) {
if (!file_exists($file)) {
return $default;
}
$content = @file_get_contents($file);
if (empty($content)) {
return $default;
}
$data = json_decode($content, true);
return is_array($data) ? $data : $default;
}
function saveJson($file, $data) {
$json = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
@file_put_contents($file, $json, LOCK_EX);
}
function getClientIp() {
$keys = array('HTTP_CF_CONNECTING_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR');
foreach ($keys as $key) {
if (!empty($_SERVER[$key])) {
$ips = explode(',', $_SERVER[$key]);
$ip = trim($ips[0]);
if (filter_var($ip, FILTER_VALIDATE_IP)) {
return $ip;
}
}
}
return '0.0.0.0';
}
function getUserAgent() {
return isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'Unknown';
}
function getReferrer() {
return isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'Direct';
}
function isAdminLoggedIn() {
return isset($_SESSION['admin_logged_in']) && $_SESSION['admin_logged_in'] === true;
}
function requireAdmin() {
if (!isAdminLoggedIn()) {
header('Location: ?page=login');
exit;
}
}
function getSettings() {
$defaults = array(
'visits_per_link' => 6,
'rotation_mode' => 'sequential',
'track_ips' => true,
'unique_only' => false,
'created_at' => date('Y-m-d H:i:s')
);
$saved = loadJson(SETTINGS_FILE, array());
return array_merge($defaults, $saved);
}
function saveSettings($settings) {
saveJson(SETTINGS_FILE, $settings);
}
function getLinks() {
return loadJson(LINKS_FILE, array());
}
function saveLinks($links) {
saveJson(LINKS_FILE, $links);
}
function getStats() {
return loadJson(STATS_FILE, array());
}
function addStat($linkId, $linkUrl) {
$stats = getStats();
$today = date('Y-m-d');
$entry = array(
'time' => date('Y-m-d H:i:s'),
'ip' => getClientIp(),
'user_agent' => getUserAgent(),
'referrer' => getReferrer(),
'link_id' => $linkId,
'link_url' => $linkUrl,
'date' => $today
);
$stats[] = $entry;
// Keep only last 5000 records
if (count($stats) > 5000) {
$stats = array_slice($stats, -5000);
}
saveJson(STATS_FILE, $stats);
return $entry;
}
function getNextLink() {
$links = getLinks();
$settings = getSettings();
if (empty($links)) {
return null;
}
// Filter active links only
$activeLinks = array();
foreach ($links as $link) {
if (isset($link['active']) && $link['active']) {
$activeLinks[] = $link;
}
}
if (empty($activeLinks)) {
return null;
}
// Sort by order
usort($activeLinks, function($a, $b) {
$orderA = isset($a['order']) ? intval($a['order']) : 0;
$orderB = isset($b['order']) ? intval($b['order']) : 0;
return $orderA - $orderB;
});
$visitsPerLink = max(1, intval(isset($settings['visits_per_link']) ? $settings['visits_per_link'] : 6));
$stats = getStats();
// Count total visits for active links only
$totalVisits = 0;
foreach ($stats as $stat) {
foreach ($activeLinks as $link) {
if ($stat['link_id'] == $link['id']) {
$totalVisits++;
break;
}
}
}
// Calculate which link to use
$totalSlots = count($activeLinks) * $visitsPerLink;
$currentPosition = $totalVisits % $totalSlots;
$linkIndex = floor($currentPosition / $visitsPerLink);
if ($linkIndex >= count($activeLinks)) {
$linkIndex = 0;
}
return isset($activeLinks[$linkIndex]) ? $activeLinks[$linkIndex] : null;
}
function getLinkStats($linkId) {
$stats = getStats();
$count = 0;
$today = date('Y-m-d');
$todayCount = 0;
$ips = array();
foreach ($stats as $stat) {
if ($stat['link_id'] == $linkId) {
$count++;
$ips[$stat['ip']] = true;
if ($stat['date'] === $today) {
$todayCount++;
}
}
}
return array(
'total' => $count,
'today' => $todayCount,
'unique' => count($ips)
);
}
function getAllStatsSummary() {
$stats = getStats();
$total = count($stats);
$today = date('Y-m-d');
$todayCount = 0;
$ips = array();
$linksUsed = array();
$hourly = array_fill(0, 24, 0);
foreach ($stats as $stat) {
if ($stat['date'] === $today) {
$todayCount++;
}
$ips[$stat['ip']] = true;
$linkId = $stat['link_id'];
$linksUsed[$linkId] = isset($linksUsed[$linkId]) ? $linksUsed[$linkId] + 1 : 1;
$hour = intval(substr($stat['time'], 11, 2));
if ($hour >= 0 && $hour < 24) {
$hourly[$hour]++;
}
}
return array(
'total' => $total,
'today' => $todayCount,
'unique_ips' => count($ips),
'links_used' => $linksUsed,
'hourly' => $hourly
);
}
function generateId() {
return substr(str_shuffle('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), 0, 8);
}
?>