惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
D
Docker
GbyAI
GbyAI
B
Blog RSS Feed
博客园 - 司徒正美
博客园 - Franky
美团技术团队
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
aimingoo的专栏
aimingoo的专栏
C
Check Point Blog
IT之家
IT之家
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
www.infosecurity-magazine.com
www.infosecurity-magazine.com
AI
AI
O
OpenAI News
Attack and Defense Labs
Attack and Defense Labs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Tailwind CSS Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
S
Secure Thoughts
博客园 - 聂微东
L
LINUX DO - 最新话题
U
Unit 42
SecWiki News
SecWiki News
A
Arctic Wolf
Schneier on Security
Schneier on Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
V
Visual Studio Blog
量子位
The Cloudflare Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
大猫的无限游戏
大猫的无限游戏
Google DeepMind News
Google DeepMind News
G
Google Developers Blog
T
Threat Research - Cisco Blogs
TaoSecurity Blog
TaoSecurity Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
B
Blog
博客园 - 【当耐特】
C
CERT Recently Published Vulnerability Notes
Scott Helme
Scott Helme
Last Week in AI
Last Week in AI
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Microsoft Security Blog
Microsoft Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
Latest news
Latest news

文章列表 - 她和她的猫

使用小鹤双拼一个月 折腾 Hugo PaperMod 主题 去长鹿旅游休博园 1Password 自动化登录堡垒机 深入 Hyperf:Inject 注解是如何工作的? 译|理解容器镜像层 使用 Rust 实现高性能预写日志(Write Ahead Log) 译|使用 Linux 命名空间隔离系统 深入 Hyperf:HTTP 服务是如何处理请求的? Linux 文件权限学习笔记 译|了解 Bitcask:基于日志结构的 KV 存储引擎 还原 SM2 压缩公钥的几种方法 深入 Hyperf:HTTP 服务启动时发生了什么? 一次 Hyperf 注解失效问题分析 将博客迁移到又拍云 译|PHP 7 新的 Hashtable 实现 排查 ES 查询问题:深入了解 json_encode() 函数 浅析 Redlock 分布式锁实现原理 Yar 源码阅读笔记:RPC 服务端 Yar 源码阅读笔记:客户端的并行调用 Yar 源码阅读笔记:客户端的同步调用 Yar 源码阅读笔记:数据传输模块 Yar 源码阅读笔记:消息编码模块 Yar 源码阅读笔记:RPC 通信协议 Yar 源码阅读笔记:开篇 PHP 8 新特性介绍 基于 OpenSSL 实现国密 SM4 加解密 PHP 源码阅读笔记:编译与调试 PHP 什么是惊群问题 大端模式和小端模式 基于 GitHub Actions 定时推送网址到百度站长平台 聊聊五种 I/O 模型 Workerman 源码分析:文件上传 浅入浅出 HTTP 协议 PHP 网络编程:构建 MySQL 蜜罐获取攻击者微信 ID 使用 Workerman 接入 Bilibili 直播弹幕协议 使用 GitHub Actions 自动部署 Hexo 什么是二进制安全 【转载】PHP 程序员进阶之路 优化 Workerman 检查主进程是否存活的逻辑 基于 Redis 实现分布式锁 《PHP 实现 Base64 编码/解码》笔记 PHP 多进程下载必应壁纸 基于 Redis 实现延迟队列 【转载】PHP 实现 Base64 编码/解码 使用 MySQL FIELD() 函数自定义排序规则 Laravel 的 Facades 实现原理 C语言单链表实现约瑟夫环 数据结构学习笔记:顺序栈和链栈(C语言) 使用 QueryList + Redis 下载壁纸 在 Laravel 登录/注册中使用 mews/captcha 扩展包 使用 mews/captcha 扩展包为 Laravel 应用添加图片验证码 给 YOURLS 短网址系统编写插件《批量生成短网址》 PHP 7.1 使用 json_encode 函数造成浮点类型数据出现精度问题 Laravel 授权策略(Policy)的基本使用 Ubuntu 系统下 WiFi 频繁掉线解决方法 Laravel 应用部署到 Nginx 服务器上的第一个坑 Ubuntu 16.04 LST 安装 Redis 和 Composer PHP 采集逐浪小说章节列表 Nginx 环境 SSL 强制 HTTP 301 跳转到 HTTPS 【工作&生活】第一周 ServiceStack.Redis 与多线程 Count the number of Duplicates C# Base64 加密及解密 ASP.NET MVC 使用动态类型传递数据 Django 使用 order_by() 对数据进行排序操作 ASP.NET + jQuery + AJAX 实现用户登录 ASP.NET 从客户端中检测到有潜在危险的 Request.Form 值 ASP.NET 使用 FormData 实现 AJAX 上传图片 Python 使用 BeautifulSoup 抓取网页 贪心算法之字符串的完美度 一言不和就造轮子之 CookieHelper ASP.NET 上传图片 DBHelper 类 C# 捕获屏幕源码 用 JavaScript 做一些有趣的事情 第一篇文章 好久不见。 如何防止非法调用 PHP 文件 清明小记。 PHP 生成随机字符串 Z-Blog PHP 程序做 301 跳转 PHP 处理数组常用的几个函数 Sublime Text 3 快捷键总结 PHP 使用 file_get_contents() 函数实现采集网页 使用 C# 编写学生信息管理系统 终于到了。 zblog报错: magic_quotes_gpc 和 safe_mode 世事无常。 如何使用 PHP 上传文件 安卓手机编写和运行 PHP 程序的软件 使用 AJAX 刷新、验证 PHP 图片验证码 PHP 生成图片验证码 PHP 之 session 的使用方法 PHP 之 cookie 的使用方法 PHP 实现分页原理详解 Thinkphp 框架中系统常量在 Js 文件中不解析的解决方法
给 YOURLS 短网址系统编写插件《Hello World!》
她和她的猫 · 2018-07-17 · via 文章列表 - 她和她的猫

YOURLS 简介

YOURLS (Your Own URL Shortener) 是一款开源的PHP程序,让你可以轻松建立属于自己的短网址生成系统。而无需第三方平台你就可以获得所有的数据统计,并且支持一系列插件扩展。

官网:http://yourls.org/

Github:https://github.com/YOURLS/YOURLS

功能特性

  • 私有(只能自己使用)或 公共(所有人都可以创建短网址)模式
  • 支持顺序生成 或 自定义 URL 关键字
  • 好用的书签:轻松创建和分享链接
  • 完善的统计:历史点击报告、来源追踪、访客地理位置
  • 简洁的 AJAX 界面
  • 开发者 API
  • 友好的安装流程

编写插件

看完了简介之后现在开始介绍如何为 YOURLS 编写插件,下载安装的步骤就不在这里多说,可以根据项目里面 readme.html 的介绍来进行安装。

YOURLS 的插件都放在 根目录/user/plugins/ 下面,一个插件一个目录。每个目录下面的 plugin.php 就是插件的入口文件,也是插件的核心所在,一般会有 README.md 文件来介绍这个插件。

插件目录

根目录/user/plugins/ 目录下创建一个名叫 say-hello 的目录,并创建 plugin.php 文件,用来编写插件的逻辑。

plugin.php 内容:

<?php
/*
Plugin Name: Say Hello
Plugin URI: http://yourls.org/
Description: Sample plugin to illustrate how actions and filters work.
Version: 0.1
Author: 她和她的猫
Author URI: https://blog.csdn.net/qq_42451060
*/

// 防止被直接访问
if( !defined( 'YOURLS_ABSPATH' ) ) die();

// 注册插件
yourls_add_filter( 'api_action_say_hello', 'say_hello' );

// 编写插件逻辑
function say_hello()
{
    $content = isset($_GET['content']) ? $_GET['content'] : 'Hello World!';
    echo "<h1>{$content}</h1>";
    exit;
}

文件开始的那一段注释用来描述这个插件的名称、插件地址、描述、版本号、作者、作者url 等信息,这些信息将会在管理后台的插件列表里面展示。

然后判断是否定义了 YOURLS_ABSPATH 常量,如果没有定义的话将直接停止运行,用于防止直接通过 url 访问插件。

通过 yourls_add_filter 函数向程序注册这个插件。第一个参数是定义了当前插件被触发的 hook 名称,可以把这个当作插件的唯一名称来理解。其中 api_action_ 是固定的,后面跟的是插件的名字(api_action_{插件名称}),插件名称在后面调用的时候会用到。第二个参数是当插件被调用的时候,让哪个函数去处理这个请求,所以我们在下面定义了一个名为 say_hello 的函数,用来编写实现这个插件的功能。

函数功能很简单,接收content参数,如果不存在的话就使用默认的值,最后输出 content

启用插件

要想插件能够被调用,要先在管理后台启用插件。

启用插件

可以看到在 plugin.php 文件中的注释信息都被展示出来了。

将插件启用后,点击菜单 Tools,找到 signature,用于调用接口时验证身份信息。

signature

调用插件

接下来就是如何调用插件了,url 如下:

http://域名或ip地址/yourls-api.php?action=say_hello&signature=005154be54
  • action 是调用的插件名称。
  • signature 用于验证调用这个的身份信息。

上面的是 signature 调用方式,另外一种是帐号密码的方式:

http://域名或ip地址/yourls-api.php?action=say_hello&username=her-cat&password=123456

这种方式容易将帐号信息暴露,所以不推荐这种方式。

运行结果:

运行结果

带上 content 参数:

http://域名或ip地址/yourls-api.php?action=say_hello&signature=005154be54&content=她与她的猫

运行结果

总结

重点:插件的注册与调用。

推荐看一下 YOURLS 的插件系统的实现原理,挺有收获的。

Ending…