ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

YOURLS 完全指南:自托管 PHP URL 缩短器的部署、API、插件与源码架构解析

YOURLS 完全指南:自托管 PHP URL 缩短器的部署、API、插件与源码架构解析 后端【免费下载链接】YOURLS The standard, self hosted, powerful and customizable, URL shortener in PHP项目地址https://gitcode.com/gh_mirrors/yo/YOURLS点击查看免费下载本篇技术指南以 YOURLS 官方 README 为骨架结合当前仓库源码逐层展开先讲清楚它是什么、能做什么再带你在自己的服务器上完成从安装配置到 API 调用、插件开发的完整实战闭环最后深入includes/源码剖析其引导流程、数据库层与钩子系统。读完你将掌握一套可完全掌控数据、自带统计与插件生态的自托管短链服务搭建与二次开发方案。什么是 YOURLSYour Own URL ShortenerYOURLS是一组 PHP 脚本它让你能在自己的服务器上运行属于自己的 URL 缩短服务。名字是YourOwnURLShortener 的缩写——强调Your Own与依赖第三方 SaaS 的短链服务不同你的数据、统计、插件全部由自己掌控。它是免费开源的软件当前仓库版本号定义在 includes/version.php1.10.7-dev同时携带数据库 schema 版本YOURLS_DB_VERSION 507用于触发数据库结构升级。核心能力均来自 README 原述并有源码印证完全掌控数据所有短链与点击记录都存在你自己的 MySQL 数据库中不经过任何第三方详细统计与数据分析管理后台内置短链点击统计、来源分析等能力仓库 includes/functions-infos.php、includes/functions-geo.php 分别承载信息聚合与 GeoIP 地域分析逻辑插件与扩展通过一套与 WordPress 同源的过滤器/动作钩子系统可无限扩展功能详见下文插件 API一节免费开源以 MIT 许可证发布见仓库 LICENSE。仓库根目录的 composer.json 给出了项目的运行时轮廓要求PHP ^8.1核心扩展包括ext-pdo、ext-pdo_mysql、ext-dom、ext-filter、ext-hash、ext-pcre依赖库涵盖rmccue/requestsHTTP 客户端、geoip2/geoip2GeoIP 数据库读取、aura/sqlSQL 构建、pomo/pomoi18n、spatie/array-to-xmlXML 输出等composer 的suggest字段还提示了可选扩展如ext-curl用于 API、ext-openssl用于抓取 HTTPS 页面标题、ext-bcmath/ext-gmp用于读取 GeoIP 数据库。快速开始部署前必读YOURLS 官方在 docs.yourls.org 提供了从新手到专家的完整文档本仓库则可以直接作为部署源码使用。按 README 的指引部署流程可概括为获取本仓库源码并放置到你的 Web 服务器Apache/Nginx PHP 8.1 MySQL可访问的目录复制配置模板user/config-sample.php为user/config.php若使用更早期布局则是includes/config-sample.php→includes/config.php填入数据库与站点信息访问/admin/install.php完成安装检查 PDO、数据库版本、PHP 版本等前置条件创建.htaccess与 SQL 数据表安装完成后通过管理后台 admin/index.php 进入管理界面后台欢迎页、短链管理表格与统计视图的样式与脚本分别位于 css/ 与 js/。关于复制配置文件这一步当前仓库的配置查找逻辑在 includes/Config/Config.php 的find_config()中依次尝试用户自定义路径 →user/config.php→includes/config.php都找不到则抛出ConfigException提示请阅读 readme.html 了解如何安装。注意仓库根目录未包含user/config-sample.php与user/config.phpuser/目录同样未在本次文件清单中出现实际部署时请以官方发布包或 docs.yourls.org 提供的模板为准。安装过程的源码视角admin/install.php 展示了安装阶段的关键校验与动作依次检查 PDO 扩展yourls_check_PDO()、MySQL 版本yourls_check_database_version()、PHP 版本yourls_check_php_version()任一不满足都会收集到错误数组并中止若检测到 YOURLS 已安装但.htaccess缺失会自动调用yourls_create_htaccess()重建提交install请求后会执行yourls_create_htaccess()创建/更新伪静态规则再调用yourls_create_sql_tables()建表成功与警告信息会按error/warning/success三类展示在安装页。从代码注释可见安装过程依赖.htaccess将短链请求转发到 yourls-loader.php再由 yourls-go.php 完成 301/302 重定向——这是 Apache 环境下的默认工作方式Nginx 用户需要自行编写等价的 rewrite 规则安装页对此有明确警告文案。引导流程从入口到运行YOURLS 的所有入口文件yourls-api.php、yourls-go.php、yourls-loader.php、admin/*等都统一requireincludes/load-yourls.php 完成引导require __DIR__ . /vendor/autoload.php加载 Composer 依赖与YOURLS\命名空间PSR-4 映射到includes/见 composer.json实例化\YOURLS\Config\Config通过find_config()定位配置文件并以全局作用域require_once保证$yourls_user_passwords等用户自定义变量注册到全局空间调用define_core_constants()校验并定义强制常量YOURLS_DB_USER/PASS/NAME/HOST/PREFIX、YOURLS_SITE见 includes/Config/Config.php依次实例化InitDefaults与Initincludes/Config/InitDefaults.php、includes/Config/Init.php完成时区、语言、数据库连接、全部选项读取与插件加载等默认行为。短链接的一生重定向链路源码拆解理解 YOURLS 的核心莫过于看一条短链从被访问到 301 跳转的全过程。入口 yourls-loader.php 解析出$keyword后交给 yourls-go.php// yourls-go.php 核心逻辑节选 if( !isset( $keyword ) ) { yourls_do_action( redirect_no_keyword ); yourls_redirect( YOURLS_SITE, 301 ); } $keyword yourls_sanitize_keyword($keyword); // if we have a page, display and exit if( yourls_is_page($keyword) ) { yourls_page( $keyword ); return; } // if we can get a long URL from the DB, redirect if( $url yourls_get_keyword_longurl( $keyword ) ) { yourls_redirect_shorturl($url, $keyword); return; } // Either reserved keyword, or no such keyword yourls_do_action( redirect_keyword_not_found, $keyword ); yourls_redirect( YOURLS_SITE, 302 );流程要点关键字先经yourls_sanitize_keyword()清洗防止注入与异常字符关键字若对应一个页面如yourls-infos.php这类内置页则直接渲染页面而非跳转命中数据库中的长链则通过yourls_redirect_shorturl()发起重定向默认 301并在跳转前记录点击、更新统计未命中时触发redirect_keyword_not_found动作并以 302 跳回站点首页——注释写明刻意不返回 404既避免暴露关键字存在性也不污染日志。管理后台与统计安装完成后管理后台位于 admin/index.php配套的 API 入口 admin/admin-ajax.php 处理前台异步请求短链表格的排序、筛选与批量操作由 js/common.js、js/tablesorte.js 等脚本驱动样式定义在 css/style.css。统计能力是 YOURLS 的招牌功能每次点击都会在重定向前记录聚合逻辑在 includes/functions-infos.php提供yourls_get_click_stats()等按时间、按短链维度的统计函数并可结合 includes/geo/ 下的 GeoLite2 数据库与 includes/functions-geo.php 展示访客地域分布。includes/geo/flags/目录中按 ISO 国家/地区代码命名的旗帜图片flag_us.gif、flag_cn.gif等即用于统计页的地域旗标展示。公开 API将短链服务编程化yourls-api.php 提供了完整的 HTTP API入口逻辑清晰$action ( isset( $_REQUEST[action] ) ? $_REQUEST[action] : null ); yourls_do_action( api, $action ); $api_actions array( shorturl yourls_api_action_shorturl, stats yourls_api_action_stats, db-stats yourls_api_action_db_stats, url-stats yourls_api_action_url_stats, expand yourls_api_action_expand, version yourls_api_action_version, ); $api_actions yourls_apply_filter( api_actions, $api_actions );内置的六个标准动作通过api_action_action过滤器注册即插件可以通过yourls_add_filter(api_actions, ...)增加自定义 API 方法或直接挂接api_action_xxx替换默认实现。请求参数支持action必填取值shorturl缩短、expand还原长链、stats全局统计、db-stats数据库统计、url-stats单链统计、version版本号format输出格式默认xml可传json需配合ext-json以获得更佳性能callback/jsonp传入时启用 JSONP 回调包装认证通过 includes/auth.php 与 includes/functions-auth.php 处理支持登录态cookie、signature签名基于YOURLS_COOKIEKEY计算的 HMAC 签名见 includes/functions-auth.php 的yourls_check_signature()以及用户名密码 Basic Auth 等多种方式仓库 tests/tests/auth/ 下的LoginAPITest.php、SigTest.php、NonceTest.php等测试对各类认证路径做了系统验证。仓库提供了可直接参考的调用示例文件sample-public-api.txt、sample-remote-api-call.txt远程调用以及 sample-public-front-page.txt、sample-robots.txt。API 的输出序列化由yourls_api_output()完成内部依赖spatie/array-to-xml生成 XML、原生json_encode输出 JSON输出格式可被 tests/tests/api/OutputTest.php 等测试用例校验。插件 API扩展 YOURLS 的正确姿势README 强调 YOURLS 可通过插件无限扩展这一能力的底层实现位于 includes/functions-plugins.php共 958 行是整个钩子系统的核心。该文件明确注释其设计深受 WordPress 钩子系统启发yourls_add_filter($hook, $function_name, $priority 10, $accepted_args NULL, $type filter)注册一个过滤器函数$priority控制执行顺序默认 10数值越小越先执行同优先级按注册顺序执行yourls_add_action($hook, ...)注册一个动作action在特定执行点被触发所有钩子集中存放在全局$yourls_filters数组结构为$yourls_filters[hook][priority][function_id][function|accepted_args|type]已执行过的动作计数存放在$yourls_actions过滤器可短路shunt例如 includes/functions-options.php 中yourls_get_option()首先调用yourls_apply_filter(shunt_option_.$option_name, ...)插件返回非默认值即可完全接管选项读取实现缓存或覆盖逻辑动作贯穿整个请求生命周期例如 yourls-api.php 中的api动作、yourls-go.php 中的redirect_no_keyword、redirect_keyword_not_found动作。插件加载发生在引导阶段Init中plugins_loaded钩子附近插件目录的组织、头部注释解析仓库 tests/data/plugins/headers/ 提供了合法/非法头部注释的测试样本、加载失败处理tests/data/plugins/invalid-code/ 覆盖了语法错误、类缺失等场景都有对应实现与测试见 tests/tests/plugins/FilesTest.php、tests/tests/plugins/FiltersTest.php、tests/tests/plugins/ActionsTest.php。社区维护的插件、工具与指南聚合在官方维护的 Awesome YOURLS 列表。配置与数据库层数据自主的基石完全掌控数据在源码层面的体现数据库层位于 includes/class-mysql.php 与 includes/Database/YDB.php使用 PDO 直连 MySQL连接时按host:port语法自动拆分端口默认字符集utf8mb4可通过db_connect_charset过滤器定制DSN 由db_connect_custom_dsn过滤器开放替换支持 SQLite、PostgreSQL 等其它 PDO 驱动见 includes/class-mysql.php 的注释示例驱动选项与属性均可通过db_connect_driver_option、db_connect_attributes过滤器注入如设置PDO::ATTR_ERRMODE PDO::ERRMODE_EXCEPTION选项OptionsAPI 位于 includes/functions-options.php 与 includes/Database/Options.php提供yourls_get_option()、yourls_update_option()、yourls_add_option()、yourls_delete_option()等函数实现数据库选项的读写缓存与序列化存储yourls_get_all_options()一次性读取全部选项并据此判断安装状态零选项则视为未安装见 includes/functions-options.php。短链 CRUD 与查询逻辑集中在 includes/functions-shorturls.php关键字生成、yourls_get_keyword_longurl()、yourls_get_longurl_keyword()等对应的测试套件在 tests/tests/shorturl/覆盖 CRUD、长链去重、洪水防护 FloodTest、关键字 getter 等场景。周边设施日志、调试与测试调试日志定义YOURLS_DEBUG后includes/functions-debug.php 与 includes/Database/Logger.php 会记录 SQL 查询与调试信息数据库层还带 Profilerincludes/Database/Profiler.php统计查询耗时。本地化i18n 基础设施在 includes/functions-l10n.php基于 pomo 库解析.mo/.po文件仓库 tests/data/pomo/ 带有fr_FR测试样本所有 UI 文案经由yourls__()/yourls_e()翻译函数输出。HTTP 封装includes/functions-http.php 基于rmccue/requests库封装了yourls_http_get()/yourls_http_post()等便捷函数返回完整 Response 对象或响应体字符串用于抓取长链页面标题、GeoIP 查询等场景tests/tests/http/ 下有针对 SSRF 防护、代理、头信息等的专项测试。测试体系仓库 tests/ 目录包含基于 PHPUnit 的完整测试phpunit.xml.dist 为配置覆盖认证、API、DB、格式化、GeoIP、HTTP、安装、插件、短链、统计、主题等全部模块是深入理解行为约定的第一手资料。开源与许可YOURLS 以MIT 许可证发布LICENSEREADME 中的原话是Free software. Do whatever the hell you want with it.——意味着你可以自由使用、修改、再分发包括商业用途。项目通过 OpenCollective 接受 Backer 与 Sponsor 赞助以维持开源开发。小结围绕 README 宣称的自托管、可定制、数据自主三个关键词本仓库给出了完整的实现load-yourls.php → Config/Init → 数据库层 → 钩子系统 → API/重定向/后台的清晰分层让二次开发有章可循插件钩子遍布请求生命周期API 六种标准动作加 JSONP/多格式输出让短链服务可以无缝编程化。无论你是想给团队搭建内部短链服务还是研究一个 PHP 8.1 时代的、带完整测试套件的中型 Web 应用架构YOURLS 都是一个值得反复研读的开源范本。赞分享后端【免费下载链接】YOURLS The standard, self hosted, powerful and customizable, URL shortener in PHP项目地址https://gitcode.com/gh_mirrors/yo/YOURLS点击查看免费下载相关推荐CANN ops-math one_hot算子API文档aclnnOneHot 查看源码 https://link.gitcode.com/i/75131d0c9ac8f5f3e152c2372e963dee算子库人工智能CANNYOURLS 内置的 PHP URL 构建工具ozh/http_build_url 使用指南与源码解析YOURLS 内置的 PHP URL 构建工具ozh/http_build_url 使用指南与源码解析 导读 本文围绕 YOURLS 仓库中随附的 ozh/h后端erd入门教程5分钟学会创建你的第一个数据库ER图erd入门教程5分钟学会创建你的第一个数据库ER图 erd是一个强大的 实体关系图生成器 它能够将纯文本描述的数据库模式自动转换为专业的图形化ER图。对于数创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表