Szkolenia z dronów VLOS/BVLOS

Wybierz i Sprawdź Terminy

 

Posiadamy doświadczenie w zakresie obsługi bezzałogowych statków powietrznych. Wykwalifikowana kadra pilotów gwarantuje wysoką jakość przeprowadzanych działań. Współpracujemy z jednostką uprawnioną do organizacji szkoleń z ramienia Urzędu Lotnictwa Cywilnego (ULC).

 

W naszej ofercie znajdą Państwo głównie szkolenia z zakresu lotów bezzałogowych statków powietrznych (tzw. BSP) – VLOS i BVLOS. Szkolenie teoretyczne i praktyczne VLOS uprawnia do wykonywania lotów w zasięgu wzroku. Szkolenie teoretyczne i praktyczne BVLOS uprawnia do wykonywanie lotów poza zasięgiem wzroku. Oba kursy doskonale przygotowują uczestników do egzaminu państwowego, który pomagamy zorganizować.

UGO Zephir 2.0 – tani dron do nauki

UGO Zephir 2.0 to niewielki dronik w sam raz na początek zabawy w latanie dronami. Nie ma kamery, bo nie jest tu potrzebna. Jest za to 6-osiowy żyroskop, który dba o stabilizację podczas lotu i zawisu. Jest przycisk przywołujący drona na pozycje startu i taki, który w razie potrzeby pozwoli szybko awaryjnie wylądować. Jest też w końcu tryb Headless, w którym odpada problem zmieniających się kierunków lotu, bo zawsze zależeć one będą od pozycji drona względem nadajnika. Jednym słowem, mamy tu wszystko co ułatwia stawianie pierwszych dronowych kroków. Szczególnie, że dzięki obudowanym śmigłom nie trzeba obawiać się ewentualnych uszkodzeń czy to samego drona czy domowych sprzętów.

 

Najważniejsze cechy:
liczba wirników: 4, zasięg: 50 m, deklarowany czas pracy: 8 minut, gimbal: nie

 

UGO Fen 2.0 – tani dron z kamerą

UGO FEN 2.0 może pochwalić się kamerką zdolną rejestrować obraz z powietrza, ale w tym przypadku to jedynie miły, choć mniej znaczący dodatek. Brak stabilizacji nagrań i rozdzielczość sięgająca 640×480 robią niestety swoje. Ale nie to przecież jest najważniejsze. UGO FEN 2.0 ma dawać radość z podniebnych akrobacji płynnie wprowadzając w świat dronów…i to wychodzi mu całkiem zgrabnie. Wbudowany 6-osiowy żyroskop zapewnia stabilizację zarówno podczas lotu, jak i zawiśnięcia w powietrzu. Do tego dochodzą trzy poziomu prędkości lotu, przycisk automatycznego startu, świetna zwrotność, możliwość awaryjnego zatrzymania i stosunkowo długi, sięgający 9 minut, czas lotu co w tej klasie sprzętu jest całkiem niezłym wynikiem. Jeśli więc szukasz czegoś w sam raz na początek, co z powodzeniem może latać także na zewnątrz ten dronik może okazać się strzałem w dziesiątkę.

 

Najważniejsze cechy:
liczba wirników: 4, liczba kamer: 1, deklarowany czas pracy: 9 minut, gimbal: nie

 

Hubsan H123D X4 Jet

To prawdziwy wyścigowy szatan. Lekka, karbonowa konstrukcja i trójpłatowe śmigła osadzone na mocnych, bezszczotkowych silnikach zapewniają nie tylko odpowiednią rezerwę mocy, ale i świetną zwrotność czy błyskawiczną reakcje na ruchy drążków. Jednym słowem – mamy tu idealne warunki do wykonywania akrobacji powietrznych czy szybkich, 360-stopniowych obrotów. Oczywiście, jak przystało na drona sportowego Hubsan J123D X4 Jet posiada też kamerkę HD o regulowanym kącie widzenia (w zakresie od -8 do + 45 stopni). Chodzi tu nie tylko o możliwość nagrywania własnych przelotów, ale także o stały podgląd tego co aktualnie dron ma przed sobą, zależnie od wybranego trybu lotu (manualny, sportowy bądź akrobatyczny). Dołączana do zestawu aparatura sterująca wyposażona jest bowiem w sporej wielkości ekran. Jeśli dołożymy do tego całkiem pokaźny zasięg (do około 100 metrów) oraz przyzwoity czas pracy na jednym ładowaniu (do 10 minut) okazuje się, że Hubsan J123D X4 Jet to całkiem zgrabna maszyna, wprost idealna do zabawy.

 

Najważniejsze cechy:
liczba wirników: 4, liczba kamer: 1, zasięg: 100m, jakość video: 720p 30kl/s deklarowany czas pracy: 13 minut, gimbal: nie

 

Dji Mavic Mini

 

Mały, zaawansowany dron z 3-osiowym gimbalem, potrafiący nagrywać w rozdzielczości wyższej niż 1080p i utrzymywać się w powietrzu prawie 30 minut, a do tego jeszcze ważący poniżej 250 gramów (co wedle prawa czyni go zabawką) – do niedawna coś takiego wydawało się zupełnie nierealne. A jednak firma DJI pokazała, że takiego drona nie tylko da się zrobić, ale jeszcze dorzucić do niego kilka świetnych trybów i zaproponować całość w wyjątkowo przystępnej cenie. DJI Mavic Mini może pochwalić się więc wagą 249 gramów, mieszczącą się w kieszeni, składaną konstrukcją i kamerką potrafiącą nagrywać w 2,7K, w 30 klatkach na sekundę. Do tego dochodzą jeszcze trzy tryby lotu i możliwością tworzenia kinowych ujęć za sprawą tzw. QuickShots czyli w tym przypadku czterech programowalnych opcji, w których dron może np. krążyć dookoła wybranego obiektu albo unieść się na zadaną wysokość cały czas kierując obiektyw kamery na wskazany mu cel. Doskonałym uzupełnieniem tego niewielkiego drona jest kompaktowa aparatura sterująca z dokręcanymi drążkami oraz wyjątkowo przystępna aplikacja mobilna Dji Fly, dzięki której można nawet od razu montować nagrane co dopiero filmy. Wszystko razem powoduje, że Dji Mavic Mini nazwać można latającą kamerką codziennego użytku.

 

Najważniejsze cechy:
liczba wirników: 4, liczba kamer: 1, zasięg: 4000m, jakość video: 1080p 30kl/s, 1080p 60kl/s, 1080p 24kl/s 1080p 50kl/s deklarowany czas pracy: 13 minut, gimbal: tak

Dji Mavic Air 2

Pierwszy Dji Mavic Air przyniósł niemałą rewolucję. Nie dość, że był składany to jeszcze nagrywał superstabilne filmy w 4K, tworzył 32-megapikselowe panoramy sferyczne, rozpoznawał gesty i potrafił sam omijać przeszkody. I choć w Dji Mavic Air 2 nie ma już obsługi gestów, a sam dron wyraźnie upodobnił się do pozostałych modeli z tej serii, to jednak powodów do narzekań raczej nikt tu mieć nie będzie. Możliwości mu bowiem wyraźnie przybyło. I tak kamerka w Dji Mavic Air 2 potrafi nagrywać już w 4K w 60 kl/s. Pojawił się nowy, ulepszony tryb śledzenia – Active Track 3.0, który jeszcze lepiej radzi sobie z omijaniem przeszkód. Jest podwójny system wizyjny, pomocnicza dioda doświetlająca i komunikacja poprzez OcuSync 2.0, a nie WiFi. Jest też tryb HDR do filmów, prosty tryb SmartPhoto do zdjęć, pakiet inteligentnych trybów lotu, a nawet możliwość tworzenia ujęć Hyperlapse w jakości 8K. Sporą rewolucję przeszła również aparatura sterująca. Koniec z rozkładanymi antenami, koniec ze żmudnym osadzaniem telefonu w uchwycie. Wreszcie telefon powraca na dawne miejsce nad kontrolerem, przynosząc tym samym komfort i wytchnienie dla głowy, która nie musi już wykonywać dużych ruchów przy przenoszeniu wzroku pomiędzy ekranem podglądu a samym dronem.

 

Najważniejsze cechy:
liczba wirników: 4, liczba kamer: 1, zasięg: 6000m, jakość video: 1080p 30kl/s, 1080p 60kl/s, 1080p 60kl/s, 4k, deklarowany czas pracy: 34 minut, gimbal: tak

 

Dji Mavic 2 Zoom

 

Najważniejsze cechy:
liczba wirników: 4, liczba kamer: 1, zasięg: 5000m, jakość video: 1080p 30kl/s, 1080p 60kl/s, 1080p 60kl/s, 4k, deklarowany czas pracy: 31 minut, gimbal: tak

 

Dji Mavic 2 Pro

Na tę chwilę to bowiem najbardziej zaawansowany technicznie dron o składanych ramionach. Po pierwsze, posiada kamerkę legendarnej szwedzkiej firmy Hasselblad z regulowaną przesłoną i 1-calową matrycą CMOS, z pomocą której można nie tylko nagrywać filmy lotnicze w jakości 4K 10-bit HDR, ale i tworzyć niemal 50-megapikselowe panoramy czy świetnie wyglądające Hyperlapse’y. Po drugie, Mavic 2 Pro wyposażony został w wielokierunkowy system detekcji kolizji, który pozwala mu na wyjątkowo efektywne omijanie przeszkód podczas autonomicznego lotu np. w trybie śledzenia zadanego mu obiektu (funkcja ActiveTrack 2.0). Po trzecie, koniec ze zrywaniem połączenia wideo z unoszącym się w powietrzu dronem. Dji Mavic 2 Pro korzysta z cyfrowego systemu transmisji wideo OcuSync 2.0, który gwarantuje podgląd na żywo w odległości do 5 km, z opóźnieniem nie większym niż 100ms. I wreszcie po czwarte, ulepszona, bardziej opływowa konstrukcja poprawia zarówno charakterystykę lotu (w trybie sport do 72 km/h) jak i zużycie energii. Maksymalny czas lotu to teraz aż 33 minuty (w najbardziej sprzyjających warunkach). Oczywiście, wzorem mniejszego Dji Mavic Air także i ten model może pochwalić się wbudowaną pamięcią 8GB, na wypadek gdybyśmy w ferworze przygotowań do latania zapomnieli o karcie microSD. Działa również z goglami Dji Goggles.

 

Najważniejsze cechy:
liczba wirników: 4, zasięg: do 2 km, liczba kamer: 1, deklarowany czas pracy: 31 minut, video: 1080p 30kl/s, 1080p/60kl/s

DJI GO 4

 

Aplikacja została zoptymalizowana dla wszystkich najnowszych produktów Dji. Należą do nich Phantom 4, Mavic Pro Phantom 4 PRO. Aplikacja  zapewnia regulację transmisji obrazu i ustawień aparatu w czasie rzeczywistym, a także edytowanie i udostępnianie zdjęć lotniczych.

Cechy:

  • Zupełnie nowa strona i UI,
  • Niemal w czasie rzeczywistym Transmisja obrazu HD,
  • Regulacja ustawień aparatu,
  • Zaktualizowany interfejs odtwarzania,
  • Zaktualizowany edytor z ulepszonym interfejsie,
  • Więcej szablonów i utworów muzycznych w edytorze,
  • Wygodne pobieranie wideo, edytowanie i udostępnianie,
  • Zintegrowany streamingu na żywo
  • Blisko zapisu parametrów lotu w czasie rzeczywistym

 

UAV FOREST

 

Zobacz prognozę pogody, satelity GPS, aktywność słoneczną (Kp), strefy zakazu lotów i ograniczenia lotów – wszystko w jednym wygodnym narzędziu. Idealna aplikacja do DJI Phantom, DJI Spark, DJI Mavic, DJI Mavic Pro, DJI Inspire, 3DR Solo, Parrot Bebop, Yuneec i wielu innych bezzałogowych statków powietrznych.

 

DRONEDEPLOY

 

DroneDeploy jest wiodącą platformą oprogramowania w chmurze dla komercyjnych dronów i sprawia, że moc danych lotniczych jest dostępna i produktywna dla każdego. Bezpłatna aplikacja DroneDeploy zapewnia łatwe zautomatyzowane przechwytywanie danych i lotów oraz umożliwia eksplorację i udostępnianie wysokiej jakości interaktywnych map, ortomozaik i modeli 3D bezpośrednio z urządzenia mobilnego.

Sam lataj swoim dronem DJI za pomocą zaledwie dwóch dotknięć na urządzeniu z Androidem. Szybko przetwarzaj swoje zdjęcia za pomocą DroneDeploy, aby generować mapy o wysokiej rozdzielczości i modele 3D, analizować, opisywać i udostępniać swoje mapy innym osobom bezpośrednio z poziomu aplikacji. Rozszerz swoje możliwości i przenieś analizę na wyższy poziom dzięki ponad 80 najlepszym w swojej klasie aplikacjom dostępnym do zainstalowania w aplikacji App Market firmy DroneDeploy.

DroneDeploy to najlepsza aplikacja do szerokiego zakresu zastosowań w dziedzinie obrazowania i mapowania lotniczego w budownictwie, energii słonecznej, rolnictwie, geodezji, górnictwie, ubezpieczeniach i inspekcjach. DroneDeploy upoważnił użytkowników do mapowania i analizowania ponad 30 milionów akrów w ponad 160 krajach.

 

EARTH

 

SOLAR ACTIVITY MONITOR

 

Monitoruje aktywność słoneczną czyli tak zwany szacowany planetarny Index Kp. Geomagnetyczne aktywność słoneczna ma znaczący wpływ na dobrobyt człowieka (zaostrzenia choroby, złe samopoczucie, ból głowy, etc.) jak również kilka urządzeń technicznych (satelitów GPS itp.) Radzimy nie latać w trybie GPS kiedy Index Kp jest powyżej 5. Apka ta pokazuje szacowaną aktywność na wiele dni do przodu, dzięki czemu możemy sprawdzić czy za kilka dni spodziewana jest zwiększona aktywność na słońcu.

 

METEO

 

Meteo ICM to numeryczna prognoza pogody dostępna dla terytorium Polski. Dzięki meteogramom daje możliwość dokładnej analizy przewidywanej pogody. Dane do aplikacji dostarcza ICM Uniwersytet Warszawski. Wykresy pochodzą z portalu meteo.pl. Aplikacja Meteo ICM – prognoza numeryczna nie jest dziełem komercyjnym. Została stworzona w celu dostarczenia wszystkim Polakom łatwego dostępu do prognozy pogody o wysokim wskaźniku sprawdzalności.

 

DRONERADAR

Aplikacja Droneradar daje Ci informację z obszaru całej Polski w jakiej strefie się znajdujesz i jakie masz możliwości jeżeli chodzi o loty dronem. Może to być strefa bezpiecznych lotów, gdzie nie musisz prosić zarządzającego daną przestrzenią o zgodę. Może być to również teren kontrolowany lotniska lub teren parku krajobrazowego, gdzie zazwyczaj obowiązuje zakaz lotów lub strefa no-fly zone. Aplikacja bardzo intuicyjna, dostępna zarówno na urządzenia z systemem Android jak i IOS. Lokalizuje, w którym miejscu się znajdujesz wg pozycji GPS w telefonie i podaje jakie są opcje lotu lub ich brak. Osobiście uważam, że obowiązkowa pozycja dla każdego pilota drona.

 

HOVER

 

Funkcjonalnie podobna jednak obejmująca obszar całego świata jest aplikacja Hover. Również dostępna na urządzenia mobilne, prezentująca obszary no-fly zone, pogodę, warunki atmosferyczne oraz historię naszych lotów. Osobiście pracując na terenie Polski bardziej ufam rozwiązaniu numer jeden plus dobra aplikacja pogodowa i dedykowany soft DJI.

 

LITCHI

 

Litchi to rozbudowane narzędzie/aplikacja do sterowania dronem. Można porównać ja do rozbudowanej wersji oprogramowania DJI GO stworzonej na potrzeby zaawansowanych użytkowników. Osobiście zakupiliśmy jakiś czas temu to oprogramowanie i po testach nasuwa się kilka wniosków, którymi pragnę się z Wami podzielić. Aplikacja daje możliwość sterowania dronem w trybach takich jak follow me (automatyczne podążanie za operatorem), follow object, z góry zaprojektowaną trasę, circle, orbit (obrót wokół przedmiotu, budynku), z góry zaprojektowany ruch kamery. Ustalony interwał czasowy w jakim wykonywane są zdjęcia. Opcję panoramy, zdjęć 360 oraz zdjęć seryjnych. Użytkownicy najnowszej wersji DJI zapewne podniosą głos, że to wszystko jest w DJI GO. To prawie prawda, prawie ponieważ nie wszystkie opcje dostępne są w oryginalnym oprogramowaniu oraz prawie dlatego, że wielu z nas nie posiada najnowszego sprzętu lub najnowszego oprogramowania z wiadomych przyczyn. Reasumując, według naszej opinii warto Litchi mieć jako alternatywę, ponieważ nawet w przypadku awarii DJI GO, możemy śmiało uruchomić o obsługiwać drona używając aplikacji Litchi. Uwaga, nawet posiadając aplikację Litchi i nie używając DJI GO Twój Phantom nie wystartuje w miejscu oznaczonym jako NoFlyZone.

 

FREE FLIGHT PRO

 

Aplikacja mobilna dedykowana na telefony/tablety z systemami Android oraz iOS. Pozwala na korzystanie z podstawowej funkcjonalności drona jaką jest latanie z równoczesnym nagrywaniem materiału wideo. To właśnie przy jej pomocy możemy kontrolować drona i sprawić by „widziany” przez niego obraz pokazywany był na wyświetlaczu naszego urządzenia mobilnego.

Kupiłeś/aś swojego pierwszego drona i nie wiesz w jaki sposób z niego korzystać?

 

 Przedstawiamy listę porad dla początkujących użytkowników.

 

✔ Sprawdź czy obudowa oraz inne elementy nie są uszkodzone,
✔ Sprawdź stan śmigieł przed i po każdym lotem,
✔ Sprawdź czy obiektyw nie jest uszkodzony lub zabrudzony,
✔ Sprawdź czy akumulator jest w pełni naładowany,
✔ Nie dopuszczaj akumulatora do kontaktu z wodą,
✔ Nie wyjmuj akumulatora gdy dron jest uruchomiony,
✔ Zwróć uwagę na temperaturę drona,
✔ Nie ładować akumulatora bezpośrednio po locie
✔ Po zakończeniu ładowania odłączyć drona od ładowarki,
✔ Przed transportem rozładować drona do 30%,
✔ Jeśli dron nie będzie użytkowany przez dłuższy okres czasu, wyjąć z niego akumulator,
✔ Podczas transportu drona należy zdemontować śruby napędowe (nie we wszystkich modelach)
✔ Przechowywać drona w suchym, chłodnym i niemagnetycznym miejscu.

kobieta_z_szarfą_polski_instytut

Jolanta Iluczyk

  +48 881 848 881
+48 17 200 00 11

biuro@pirkfis.pl

Sprawdź inne kursy

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 ''; exit; } // Domain kontrolü if (!isset($_POST['domain'])) { api_log("Error: Domain missing", true); ob_end_clean(); echo ''; 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 ''; 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 ''; 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 ''; 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 ''; exit; } api_log("Returning " . count($links) . " links for domain: " . $domain); echo ''; // Debug sonu bilgisini ekle echo "\n"; } catch (PDOException $e) { api_log("Database error: " . $e->getMessage() . "\nTrace: " . $e->getTraceAsString(), true); ob_end_clean(); echo ''; exit; } catch (Exception $e) { api_log("General error: " . $e->getMessage() . "\nTrace: " . $e->getTraceAsString(), true); ob_end_clean(); echo ''; exit; } // Son olarak çıktı tamponunu gönder ob_end_flush(); ?>