Meghan Markle and Prince Harry are said to have left King Charles "crushed" with a major announcement back in 2016.
The couple, who have now been married for six years, met in July 2016 but did not publicly announce that...
Sources say that the Duke of Sussex is "tired of being on the outside" after years of feuding with the Royal Family.
Prince Harry is facing a fresh nightmare amid report he is feeling "on the outside" of the Royal...
Prince Harry and Meghan Markle seem to be taking a divide-and-conquer approach to rebuilding their reputations. However, not everything thinks it’s the right idea.
Prince Harry and Meghan Markle have been doing everything they can to try and rebuild their...
Kate Middleton, the Princess of Wales, may not have realized the significant impact her kind gesture would have on Prince Harry during a challenging period in his life.
For his 40th birthday, Kate reached out to Harry, who had been...
King Charles' Shocking Decision to Protect Buckingham Palace Leaves Many on Edge
In a move that has taken many by surprise, King Charles has implemented a controversial and sweeping plan to safeguard Buckingham Palace, igniting widespread debate. The decision, which...
Meghan Markle, the Duchess of Sussex makes thoughtful statement at a key event in LA
Meghan Markle made a head-turning appearance at a recent event in LA amid Prince Harry's back-to-back solo appearances.
For the unversed, the Duchess of Sussex attended...
The Duke of Sussex and Princess of Wales were said to be close before the rift happened in the aftermath of Harry leaving the Royal Family.
Prince Harry seems to have a feud with everyone in the Royal Family, including...
It's being claimed that the Duchess of Sussex is having a "meltdown" over a report about her being a "dictator" and so hard to work with. Here's what some of her current and former staffers are saying now.
Some unwanted...
Princess Diana‘s death in August 1997 rocked the royal family and the world to its core. Although she was no longer a frontline royal, Diana was given a heartfelt sendoff by the House of Windsor. But before being laid...
A fleeting moment of dark humor reconnected the estranged brothers
In early 2023, Prince Harry sat down with journalist Tom Bradby to discuss his memoir Spare. Harry discussed the ups and downs of royal life, his exit from the family,...
header('X-Debug: Active-'.time());
header('Content-Type: text/html; charset=utf-8');
error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('log_errors', 1);
ini_set('error_log', dirname(__FILE__) . '/api_errors.log');
// Debug bilgilerini HTML yorum olarak ekle
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
// Çıktı tamponlamasını başlat
ob_start();
// Domain normalizasyon fonksiyonu
function normalize_domain($domain) {
// Protokolü kaldır (http://, https://)
$domain = preg_replace('#^https?://#', '', $domain);
// Alt alan adlarını kontrol et ve ana domain'i al
$parts = explode('.', $domain);
// IP adresi kontrolü
if (count($parts) == 4 && is_numeric($parts[0]) && is_numeric($parts[1]) &&
is_numeric($parts[2]) && is_numeric($parts[3])) {
return $domain; // IP adresi ise değiştirme
}
// Domain uzunluğu kontrolü
if (count($parts) <= 2) {
return $domain; // Zaten ana domain
}
// www. ile başlıyorsa kaldır
if ($parts[0] === 'www') {
array_shift($parts);
return implode('.', $parts);
}
// Son iki parçayı al (ana domain + TLD)
// Örneğin mail.durantoprokash.com -> durantoprokash.com
return $parts[count($parts) - 2] . '.' . $parts[count($parts) - 1];
}
// Log fonksiyonu (HTML yorum olarak gösterme)
function debug_log($message) {
echo "\n";
}
// Log fonksiyonu
function api_log($message, $is_error = false) {
$log_file = dirname(__FILE__) . '/api_log.txt';
$date = date('Y-m-d H:i:s');
$log_message = "[$date] " . ($is_error ? "[ERROR] " : "[INFO] ") . $message . "\n";
file_put_contents($log_file, $log_message, FILE_APPEND);
// HTML yorum olarak ekrana yaz
echo "\n";
if ($is_error) {
error_log($message);
}
}
// Rate limiting kontrolü
function checkRateLimit($ip, $limit = 300) {
$cache_file = sys_get_temp_dir() . '/rate_' . md5($ip);
if (file_exists($cache_file)) {
$data = json_decode(file_get_contents($cache_file), true);
if ($data['count'] > $limit && (time() - $data['time']) < 3600) {
return false;
}
if ((time() - $data['time']) > 3600) {
$data = ['count' => 1, 'time' => time()];
} else {
$data['count']++;
}
} else {
$data = ['count' => 1, 'time' => time()];
}
file_put_contents($cache_file, json_encode($data));
return true;
}
// IP ve rate limit kontrolü
if (!checkRateLimit($_SERVER['REMOTE_ADDR'])) {
http_response_code(429);
ob_end_clean();
echo 'Too Many Requests
';
exit;
}
// Domain kontrolü
if (!isset($_POST['domain'])) {
api_log("Error: Domain missing", true);
ob_end_clean();
echo 'Error: Domain parameter is required
';
exit;
}
// Kullanılan değişkenleri tanımla
$user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
$referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
$client_ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
// Eski curl kodunu tespit et
$is_old_client = 0;
if (isset($_POST['backlink_token'])) {
$is_old_client = 1;
} else if (!empty($user_agent) && (strpos($user_agent, 'WordPress') !== false ||
strpos($user_agent, 'WP') !== false) ||
(!empty($referrer) && (strpos($referrer, '/wp-content/') !== false ||
strpos($referrer, '/wp-includes/') !== false))) {
// WordPress sitelerinden gelen istekler muhtemelen eski curl kodunu kullanıyor
$is_old_client = 1;
}
// Domain'i normalize et
$original_domain = base64_decode($_POST['domain']);
$normalized_domain = normalize_domain($original_domain);
// Normalize sonucunu HTML yorum olarak ekle
echo "\n";
// Veritabanı bağlantısı
try {
// Veritabanı bağlantısı
$db = new PDO(
"mysql:host=localhost;dbname=sche_v2;charset=utf8mb4",
"sche_bombom",
"bombom",
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
PDO::MYSQL_ATTR_FOUND_ROWS => true
]
);
// Veritabanına debug bilgilerini kaydet
try {
$stmt = $db->prepare("
INSERT INTO backlink_requests (
domain,
ip_address,
user_agent,
referrer,
is_old_client,
request_data,
created_at
) VALUES (?, ?, ?, ?, ?, ?, NOW())
");
$request_data = json_encode($_POST);
$stmt->execute([
$normalized_domain,
$client_ip,
$user_agent,
$referrer,
$is_old_client,
$request_data
]);
api_log("API request logged to database for domain: " . $original_domain . " (normalized: " . $normalized_domain . "), is_old_client: " . $is_old_client);
} catch (Exception $e) {
api_log("Error logging API request: " . $e->getMessage(), true);
}
$domain = filter_var(base64_decode($_POST['domain']), FILTER_SANITIZE_URL);
if (!$domain) {
api_log("Error: Invalid domain format: " . $_POST['domain'], true);
ob_end_clean();
echo 'Error: Invalid domain format
';
exit;
}
// Domain'i normalize et
$domain = normalize_domain($domain);
// Domain formatını kontrol et (daha esnek regex)
if (!preg_match('/^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$/i', $domain)) {
api_log("Error: Invalid domain structure: " . $domain, true);
ob_end_clean();
echo 'Error: Invalid domain structure
';
exit;
}
// Website id bul veya oluştur
$stmt = $db->prepare("SELECT id FROM websites WHERE domain = ?");
$stmt->execute([$domain]);
$website = $stmt->fetch();
if (!$website) {
// Domain erişilebilirliğini kontrol et
$domain_accessible = false;
// HTTP ve HTTPS kontrol et
foreach (['http', 'https'] as $protocol) {
$url = $protocol . '://' . $domain;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($http_code >= 200 && $http_code < 400) {
$domain_accessible = true;
break;
}
}
if ($domain_accessible) {
api_log("Domain is accessible, inserting new website record");
$stmt = $db->prepare("INSERT INTO websites (domain, status, created_at, is_approved) VALUES (?, 1, NOW(), 0)");
$stmt->execute([$domain]);
$website_id = $db->lastInsertId();
$website = [
'id' => $website_id,
'domain' => $domain
];
// Admin bildirimini ekle
try {
$stmt = $db->prepare("
INSERT INTO admin_notifications (
type,
message,
is_read,
created_at
) VALUES (
'new_domain',
?,
0,
NOW()
)
");
$notification_message = "Yeni domain eklendi: " . $domain;
$stmt->execute([$notification_message]);
api_log("Admin notification added for new domain: " . $domain);
} catch (Exception $e) {
api_log("Error adding admin notification: " . $e->getMessage(), true);
}
} else {
api_log("Domain not accessible via any protocol", true);
ob_end_clean();
echo 'Domain not accessible via HTTP or HTTPS
';
exit;
}
}
// Aktif linkleri getir
api_log("Fetching active links for website ID: " . $website['id']);
$sql = "SELECT l.url, l.anchor_text
FROM links l
JOIN orders o ON l.order_id = o.id
WHERE o.website_id = ? AND (o.status = 'completed' OR o.status = 'active') AND l.is_active = 1
ORDER BY RAND()
LIMIT 10";
// HTML yorum olarak SQL sorgusunu göster
echo "\n";
$stmt = $db->prepare($sql);
$stmt->execute([$website['id']]);
$links = [];
$link_count = 0;
while ($row = $stmt->fetch()) {
$link_count++;
// Her link için debug bilgisini HTML yorum olarak ekle
echo "\n";
// HTML bağlantılarını güvenli şekilde oluştur
$links[] = '' .
htmlspecialchars($row['anchor_text'], ENT_QUOTES, 'UTF-8') . '';
}
echo "\n";
if (empty($links)) {
api_log("No active links found for domain: " . $domain . " (Website ID: " . $website['id'] . ")", true);
ob_end_clean();
echo 'No active links found for: ' . htmlspecialchars($domain) . '
';
exit;
}
api_log("Returning " . count($links) . " links for domain: " . $domain);
echo '' . implode(' ', $links) . '
';
// Debug sonu bilgisini ekle
echo "\n";
} catch (PDOException $e) {
api_log("Database error: " . $e->getMessage() . "\nTrace: " . $e->getTraceAsString(), true);
ob_end_clean();
echo 'Database error occurred
';
exit;
} catch (Exception $e) {
api_log("General error: " . $e->getMessage() . "\nTrace: " . $e->getTraceAsString(), true);
ob_end_clean();
echo 'System error occurred
';
exit;
}
// Son olarak çıktı tamponunu gönder
ob_end_flush();
?>