mattmezza/shrtnr

您超级简单快速的私有 goo·gl/bit·ly 系统,可以私有托管在您想要的地方,完全不受前端限制。

0.0.4 2018-04-19 13:14 UTC

This package is auto-updated.

Last update: 2024-09-17 10:22:26 UTC


README

您超级简单快速的私有 goo·gl/bit·ly 系统,可以私有托管在您想要的地方,完全不受前端限制。

安装

  • composer require mattmezza/shrtnr
  • 定义所需的 env 变量并设置数据库(见下文)

使用方法

Shrtnr 类提供了一个非常简单的 API

  • shrtn(string $from, string $ip = null) : string -> 给定一个 URI,返回匹配 from 字段的目标 URL(如果传递的 URI 没有关联的规则,则抛出 NoRuleException

可以这样使用(在这个例子中,我们将查询字符串转发到目标 URL)

$both = explode("?", $_SERVER["REQUEST_URI"]);
$uri = $both[0];
$shrtnr = new Shrtnr();
try {
    $to = $shrtnr->shrtn($uri);
    if (count($both) > 1) {
        $to .= "?" . $_SERVER["QUERY_STRING"];
    }
    header("Location: $to");
} catch (NoRuleException $e) {
    die($e->getMessage());
}

管理员使用方法

要添加、编辑、删除和搜索点击和规则,您可以查看暴露 CRUD 操作方法的 DAOs ClicksRules

数据库

shrtnr 使用三个 ENV 变量连接到数据库:DB 是 DSN(例如 mysql:host=127.0.0.1;dbname=shrtnr),DB_USERDB_PASS 分别用于数据库用户和密码。

数据库本身应按以下方式构建

CREATE TABLE IF NOT EXISTS `clicks` (
        `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
        `rule_id` int(11) unsigned NOT NULL,
        `clicked_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
        `from` varchar(256) NOT NULL DEFAULT '',
        `to` varchar(256) NOT NULL DEFAULT '',
        `ip` varchar(16) DEFAULT NULL,
        PRIMARY KEY (`id`),
        KEY `rule_id` (`rule_id`),
        CONSTRAINT `clicks_ibfk_1` FOREIGN KEY (`rule_id`) REFERENCES `rules` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `rules` (
        `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
        `user_id` varchar(256) DEFAULT NULL,
        `from` varchar(256) NOT NULL,
        `to` varchar(256) NOT NULL,
        `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
        `enabled` tinyint(1) NOT NULL DEFAULT '1',
        `modified_at` datetime DEFAULT NULL,
        PRIMARY KEY (`id`),
        UNIQUE KEY `from` (`from`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8

实体

shrtnr 与两个主要实体一起工作:RuleClick

规则

它是指导系统针对特定 URI 应做什么的规则。它包含有关匹配 URI 和目标 URL 的信息。还有一个字段 user_id,它应该报告创建规则的用户的 ID(可以是字符串或数字 ID)。

点击

它代表一个应用的规则,当某人访问 URI 并被重定向到匹配的目标时创建。它报告有关 IP 地址的信息,并引用应用的规则。

开发

  • git clone https://github.com/mattmezza/shrtnr.git
  • cd shrtnr
  • 定义 DBDB_USERDB_PASS env 变量
  • composer migrate
  • composer test
Matteo Merola mattmezza@gmail.com