PHP项目分享与外链追踪

wen PHP项目 2

本文目录导读:

PHP项目分享与外链追踪

  1. PHP项目分享
  2. 外链追踪系统

我来为你介绍PHP项目分享和外链追踪的相关内容。

PHP项目分享

开源PHP项目推荐

管理系统

  • WordPress - 最流行的博客/CMS系统
  • Drupal - 企业级CMS框架
  • Joomla - 灵活的多语言CMS
  • Laravel Blog - 基于Laravel的博客系统

框架类

  • Laravel - 优雅的PHP框架
  • Symfony - 企业级PHP框架
  • CodeIgniter - 轻量级框架
  • Yii2 - 高性能框架

电商系统

  • Magento - 企业级电商平台
  • WooCommerce - WordPress电商插件
  • OpenCart - 轻量级电商系统

项目分享平台

GitHub - https://github.com
GitLab - https://gitlab.com
Bitbucket - https://bitbucket.org
Packagist - https://packagist.org (PHP包管理)

外链追踪系统

基础外链追踪实现

<?php
// 外链追踪核心类
class LinkTracker {
    private $db;
    private $table = 'link_clicks';
    public function __construct($db) {
        $this->db = $db;
    }
    // 生成追踪链接
    public function generateTrackLink($originalUrl, $campaignId = null) {
        $trackId = md5(uniqid() . time());
        // 保存到数据库
        $stmt = $this->db->prepare("
            INSERT INTO {$this->table} 
            (track_id, original_url, campaign_id, created_at) 
            VALUES (?, ?, ?, NOW())
        ");
        $stmt->execute([$trackId, $originalUrl, $campaignId]);
        // 返回追踪URL
        return "https://yourdomain.com/track/{$trackId}";
    }
    // 处理点击
    public function handleClick($trackId) {
        // 记录点击信息
        $clickData = [
            'ip' => $_SERVER['REMOTE_ADDR'],
            'user_agent' => $_SERVER['HTTP_USER_AGENT'],
            'referer' => $_SERVER['HTTP_REFERER'] ?? '',
            'timestamp' => date('Y-m-d H:i:s')
        ];
        // 更新点击统计
        $stmt = $this->db->prepare("
            UPDATE {$this->table} 
            SET click_count = click_count + 1,
                last_clicked = NOW(),
                click_data = JSON_ARRAY_APPEND(click_data, '$', ?)
            WHERE track_id = ?
        ");
        $stmt->execute([json_encode($clickData), $trackId]);
        // 获取原始URL并跳转
        $stmt = $this->db->prepare("SELECT original_url FROM {$this->table} WHERE track_id = ?");
        $stmt->execute([$trackId]);
        $result = $stmt->fetch();
        if ($result) {
            header('Location: ' . $result['original_url']);
            exit;
        }
    }
}
?>

数据库结构

CREATE TABLE link_clicks (
    id INT AUTO_INCREMENT PRIMARY KEY,
    track_id VARCHAR(32) UNIQUE,
    original_url TEXT NOT NULL,
    campaign_id VARCHAR(50),
    click_count INT DEFAULT 0,
    created_at DATETIME,
    last_clicked DATETIME,
    click_data JSON,
    INDEX idx_track_id (track_id),
    INDEX idx_campaign (campaign_id)
);
CREATE TABLE click_details (
    id INT AUTO_INCREMENT PRIMARY KEY,
    track_id VARCHAR(32),
    ip_address VARCHAR(45),
    user_agent TEXT,
    referer_url TEXT,
    country VARCHAR(100),
    city VARCHAR(100),
    clicked_at DATETIME,
    FOREIGN KEY (track_id) REFERENCES link_clicks(track_id)
);

高级追踪功能

<?php
// 高级追踪系统
class AdvancedLinkTracker {
    // 参数追踪(UTM参数)
    public function generateUTMLink($url, $params) {
        $utmParams = [
            'utm_source' => $params['source'] ?? '',
            'utm_medium' => $params['medium'] ?? '',
            'utm_campaign' => $params['campaign'] ?? '',
            'utm_content' => $params['content'] ?? '',
            'utm_term' => $params['term'] ?? ''
        ];
        $queryString = http_build_query(array_filter($utmParams));
        return $url . (strpos($url, '?') ? '&' : '?') . $queryString;
    }
    // 点击统计报表
    public function getAnalyticsReport($campaignId, $startDate, $endDate) {
        $stmt = $this->db->prepare("
            SELECT 
                DATE(clicked_at) as date,
                COUNT(*) as clicks,
                COUNT(DISTINCT ip_address) as unique_visitors,
                COUNT(DISTINCT referer_url) as referers
            FROM click_details cd
            JOIN link_clicks lc ON cd.track_id = lc.track_id
            WHERE lc.campaign_id = ?
                AND cd.clicked_at BETWEEN ? AND ?
            GROUP BY DATE(clicked_at)
            ORDER BY date DESC
        ");
        $stmt->execute([$campaignId, $startDate, $endDate]);
        return $stmt->fetchAll();
    }
    // 反作弊检测
    public function detectFraud($trackId) {
        $stmt = $this->db->prepare("
            SELECT 
                COUNT(*) as total_clicks,
                COUNT(DISTINCT ip_address) as unique_ips,
                GROUP_CONCAT(DISTINCT ip_address) as ips
            FROM click_details
            WHERE track_id = ?
                AND clicked_at > DATE_SUB(NOW(), INTERVAL 1 HOUR)
        ");
        $stmt->execute([$trackId]);
        $data = $stmt->fetch();
        // 异常检测规则
        $fraudScore = 0;
        // 同一IP短时间内多次点击
        if ($data['total_clicks'] > 10 && $data['unique_ips'] == 1) {
            $fraudScore += 50;
        }
        // 点击率异常高
        if ($data['total_clicks'] > 100) {
            $fraudScore += 30;
        }
        return [
            'is_fraud' => $fraudScore > 60,
            'fraud_score' => $fraudScore,
            'details' => $data
        ];
    }
}
// 使用示例
$tracker = new AdvancedLinkTracker($db);
// 生成带UTM参数的追踪链接
$utmLink = $tracker->generateUTMLink(
    'https://example.com/product',
    [
        'source' => 'facebook',
        'medium' => 'social',
        'campaign' => 'summer_sale_2024'
    ]
);
$trackingLink = $tracker->generateTrackLink($utmLink, 'campaign_001');
?>

前端追踪代码

// JavaScript点击追踪
class ClickTracker {
    constructor(trackingEndpoint) {
        this.endpoint = trackingEndpoint;
    }
    trackClick(linkId, callbackUrl) {
        const data = {
            link_id: linkId,
            timestamp: Date.now(),
            screen_resolution: `${screen.width}x${screen.height}`,
            language: navigator.language,
            timezone: Intl.DateTimeFormat().resolvedOptions().timeZone
        };
        // 异步发送追踪请求
        fetch(this.endpoint, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify(data)
        }).then(() => {
            // 追踪完成后再跳转
            window.location.href = callbackUrl;
        }).catch(() => {
            // 如果追踪失败,直接跳转
            window.location.href = callbackUrl;
        });
        // 阻止默认跳转
        return false;
    }
}
// HTML使用示例
// <a href="#" onclick="tracker.trackClick('link123', 'https://example.com/target')">追踪链接</a>

推荐的PHP外链追踪工具

  1. YOURLS - 开源URL缩短器
  2. Polr - 现代URL缩短器
  3. Kint - PHP调试工具
  4. Matomo - PHP网站分析平台(含链接追踪)

这些工具和代码可以帮助你建立完整的外链追踪系统,实现点击统计、来源分析、UTM追踪等功能。

抱歉,评论功能暂时关闭!