ΠΠ°Π±ΡΠΎΡΠ°Π» Π»Π΅Π³ΠΊΠΈΠΉ ΠΈ Π±ΡΡΡΡΡΠΉ ΡΠΎΡΠ°ΡΠΎΡ ΡΡΠ°ΡΠΈΠΊΠ° (ΠΌΠΈΠΊΡΠΎ-TDS / Smartlink) ΠΏΠΎΠ΄ Π³Π΅ΠΌΠ±Π»Ρ. Π Π°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΈΠ³ΡΠΎΠΊΠΎΠ² ΠΏΠΎ ΠΎΡΡΠ΅ΡΠ°ΠΌ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π²Π΅ΡΠΎΠ².
Π§ΡΠΎ ΡΠΌΠ΅Π΅Ρ:
- Π Π°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π²Π΅ΡΠ°ΠΌ: Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π²ΡΡΡΠΈΡΡΠ²Π°ΡΡ ΡΠΎΠ²Π½ΠΎ 100%, ΠΌΠΎΠΆΠ½ΠΎ Π±Π°Ρ
Π½ΡΡΡ Π»ΡΠ±ΡΠ΅ Π²Π΅ΡΠ° (Ρ
ΠΎΡΡ 20, 50, 70), ΡΠΊΡΠΈΠΏΡ ΡΠ°ΠΌ ΠΏΡΠΎΠΏΠΎΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ ΡΠ°ΡΠΊΠΈΠ΄Π°Π΅Ρ.
- ΠΠ΅ΡΠ΅ΠΊΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ IP: Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ Π²ΠΈΠ΄ΠΈΡ Π½Π°ΡΡΠΎΡΡΠΈΠ΅ IP Π·Π° Cloudflare (
CF-Connecting-IP) ΠΈ Nginx (X-Forwarded-For).
- ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΡΠ΅Π΄ΠΈΡΠ΅ΠΊΡ: Π΅ΡΠ»ΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΡΠΆΠ΅ ΡΡΠΏΠ΅Π»ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΡΠΊΡΠΈΠΏΡ Π½Π΅ ΡΠΏΠ°Π΄Π΅Ρ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, Π° ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²ΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° ΡΠ΅ΡΠ΅Π· HTML/JS.
- ΠΠΎΠ³ΠΈ: ΠΏΠΎ Π΄Π΅ΡΠΎΠ»ΡΡ Π²ΡΠΊΠ»ΡΡΠ΅Π½Ρ, Π΄ΠΈΡΠΊ Π½Π΅ Π·Π°Π±ΠΈΠ²Π°ΡΡ. ΠΠΊΠ»ΡΡΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°:
composer require gembla/traffic-rotator
ΠΠ°ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠΎΠ΄Π΅:
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Gembla\TrafficRotator\Rotator;
// ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Π΄Π»Ρ Π»ΠΎΠ³ΠΎΠ², Π΅ΡΠ»ΠΈ ΠΎΠ½Π° Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ
$logDir = __DIR__ . '/logs';
if (!is_dir($logDir)) {
mkdir($logDir, 0755, true);
}
// ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΡΠΈ ΠΊ Π»ΠΎΠ³-ΡΠ°ΠΉΠ»Ρ (Π½ΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠ΅ΡΡΡ)
$logPath = $logDir . '/clicks_' . date('Y-m') . '.log';
$rotator = new Rotator($logPath);
// ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΎΡΡΠ΅ΡΡ ΠΊΠ°Π·ΠΈΠ½ΠΎ ΠΈ ΠΈΡ
"Π²Π΅Ρ" (Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ)
$rotator->addOffer('https://casino-brand-a.com', 20);
$rotator->addOffer('https://casino-brand-b.com', 50);
$rotator->addOffer('https://casino-brand-c.com', 30);
$rotator->addOffer('https://casino-brand-aa.com', 70);
// ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ±ΠΈΡΠ°Π΅Ρ ΡΡΡΠ»ΠΊΡ ΠΈ Π΄Π΅Π»Π°Π΅Ρ HTTP-ΡΠ΅Π΄ΠΈΡΠ΅ΠΊΡ (header Location)
$rotator->redirect();