我的 PHP 工具包,用于构建(相当)无框架的应用程序
Slim Framework CSRF 保护
Slim 框架 Flash 消息
Monolog - PHP 日志记录
zend-permissions-acl
Guzzle,PHP HTTP 客户端
zend-xmlrpc
PHPMailer – 一个功能齐全的 PHP 电子邮件创建和传输类
PHP-JWT
配置
可扩展 XML Lint
yaml-lint
dockerfile-lint
目录
快速入门
ShellCheck——shell脚本静态分析工具
分形
联盟\飞行系统
流式 JSON 编码器
使用生成器的迭代原语
安全的 PHP
EasyDB - 简单数据库抽象层
诺米
嘿,让我向你介绍一些我在生产中运行的许多 PHP 项目中使用的库和工具。
每次启动一个新的 PHP 项目时,我都会从下面的列表中挑选库来构建自己的框架。但说实话,我必须承认,我仍然使用一个微框架来处理基本的 HTTP 功能: Slim 。
📝 我不使用 ORM,主要使用 Web API 构建后端应用程序。
图书馆
1. 轻薄框架
🙋 目的: 用于构建 Web API 的微框架 🌠 GitHub 星标: 9,475 🔗 URL: slimphp/slim
2. Slim Framework CSRF防护中间件
Slim Framework CSRF 保护中间件
Slim Framework CSRF 保护
此仓库包含一个 Slim Framework CSRF 保护 PSR-15 中间件。CSRF 保护适用于所有不安全的 HTTP 请求(POST、PUT、DELETE、PATCH)。
您可以使用 Request 对象的 getAttribute()
方法获取最新的 CSRF 令牌的名称和值。默认情况下,CSRF 令牌的名称存储在 csrf_name
属性中,CSRF 令牌的值存储在 csrf_value
属性中。
安装
通过 Composer
$ composer require slim/csrf
Enter fullscreen mode
Exit fullscreen mode
需要 Slim 4.0.0 或更新版本。
用法
在大多数情况下,您希望为所有路由注册 Slim\Csrf,但是,由于它是中间件,您也可以为部分路由注册它。
注册所有路线
use DI \Container
use Slim \Csrf \Guard ;
use Slim \Factory \AppFactory ;
require __DIR__ . '/vendor/autoload.php ' ;
// Start PHP session
session_start ();
// Create Container
$ container = new Container …
Enter fullscreen mode
Exit fullscreen mode
🙋 目的: 使用 CSRF 令牌保护你的 GUI 页面 🌠 GitHub 星标: 201 🔗 URL: slimphp/csrf
3. Slim Framework 闪信
Slim 框架 Flash 消息
此代码库包含一个 Slim Framework Flash 消息服务提供程序。这使您可以定义仅从当前请求持续到下一个请求的临时消息。
安装
通过 Composer
$ composer require slim/flash
Enter fullscreen mode
Exit fullscreen mode
需要 Slim 3.0.0 或更新版本。
用法
苗条4
本示例假设您已经 php-di/php-di
安装。
<?php
use DI \ContainerBuilder ;
use Slim \Factory \AppFactory ;
use Slim \Flash \Messages ;
use Slim \Routing \RouteContext ;
require_once __DIR__ . '/../vendor/autoload.php ' ;
$ containerBuilder = new ContainerBuilder ();
// Add container definition for the flash component
$ containerBuilder ->addDefinitions (
[
'flash ' => function () {
$ storage = [];
return new Messages ($ storage );
}
]
);
AppFactory ::setContainer ($ containerBuilder ->build ());
$ app = AppFactory ::create ();
// Add session start …
Enter fullscreen mode
Exit fullscreen mode
🙋 目的: 这使您能够定义仅从当前请求持续到下一个请求的瞬态消息 🌠 GitHub 星 数 : 104🔗 URL: slimphp/flash
4. 树枝
🙋 用途: 一款非常流行的模板引擎,可与 Slim( slimphp/twig-view ) 完美集成 🌠 GitHub 星标: 5,705 🔗 URL: twigphp/twig
5. 独白
将您的日志发送到文件、套接字、收件箱、数据库和各种 Web 服务
Monolog - PHP 日志记录
注意: 这是 Monolog 3.x 的文档,如果您使用的是旧版本,请参阅 Monolog 2.x 或 Monolog 1.x 的文档
Monolog 将您的日志发送到文件、套接字、收件箱、数据库和各种 Web 服务。请参阅下面的处理程序完整列表。特殊处理程序允许您构建高级日志记录策略。
此库实现了 PSR-3 接口,您可以在自己的库中使用类型提示,以最大程度地保持互操作性。您也可以在应用程序中使用它,以确保以后始终可以使用其他兼容的日志记录器。从 1.11.0 开始,Monolog 公共 API 也将接受 PSR-3 日志级别。由于 Monolog 的日志级别早于 PSR-3,因此 Monolog 内部仍然使用其自己的级别方案。
安装
安装最新版本
composer require monolog/monolog
Enter fullscreen mode
Exit fullscreen mode
基本用法
<?php
use …
Enter fullscreen mode
Exit fullscreen mode
🙋 用途: 将日志发送到文件、套接字、收件箱、数据库和各种 Web 服务 🌠 GitHub 星标: 13,388 🔗 URL: seldaek/monolog
6. Zend ACL 权限
🙋 目的: 为权限管理提供轻量级、灵活的访问控制列表(ACL)实现 🌠 GitHub 星数: 55 🔗 URL: zendframework/zend-permissions-acl
7. 狂饮
Guzzle,一个可扩展的 PHP HTTP 客户端
Guzzle,PHP HTTP 客户端
Guzzle 是一个 PHP HTTP 客户端,可以轻松发送 HTTP 请求并轻松地与 Web 服务集成。
用于构建查询字符串、POST 请求、流式传输大型上传、流式传输大型下载、使用 HTTP cookie、上传 JSON 数据等的简单界面...
可以使用相同的接口发送同步和异步请求。
使用 PSR-7 接口进行请求、响应和流传输。这允许你将其他兼容 PSR-7 的库与 Guzzle 结合使用。
支持 PSR-18,允许与其他 PSR-18 HTTP 客户端互操作。
抽象出底层的 HTTP 传输,允许您编写与环境和传输无关的代码;即,不依赖 cURL PHP 流、套接字或非阻塞事件循环。
中间件系统允许您增强和组合客户端行为。
$ client = new \GuzzleHttp \Client ()
$ response = $ client ->request ('GET ' , 'https://api.github.com/repos/guzzle/guzzle ' );
echo $ …
Enter fullscreen mode
Exit fullscreen mode
🙋 用途: Guzzle 是一个 PHP HTTP 客户端,可以轻松发送 HTTP 请求并轻松与 Web 服务集成 🌠 GitHub 星标: 15,355 🔗 URL: guzzlehttp/guzzle
8.原产地保护组织
🙋 用途: 用于构建和执行安全 SQL 预处理语句的 PHP 扩展 🔗 URL: PDO
9. Zend XML-RPC
Zend Framework 中的 XmlRpc 组件
zend-xmlrpc
存储库废弃于 2019-12-31
该存储库已移至 laminas/laminas-xmlrpc 。
XML-RPC 的主页将其描述为“……使用 HTTP 作为传输协议、XML 作为编码方式的远程过程调用。XML-RPC 的设计尽可能简单,同时允许传输、处理和返回复杂的数据结构。”
Zend\XmlRpc
为使用远程 XML-RPC 服务和构建新的 XML-RPC 服务器提供支持。
🙋 目的: 为使用远程 XML-RPC 服务和构建新的 XML-RPC 服务器提供支持 🌠 GitHub 星数: 14 🔗 URL: zendframework/zend-xmlrpc
10. PHPMailer
PHPMailer – 一个功能齐全的 PHP 电子邮件创建和传输类
特征
可能是世界上最流行的 PHP 发送电子邮件的代码!
被许多开源项目使用:WordPress、Drupal、1CRM、SugarCRM、Yii、Joomla!等等
集成 SMTP 支持 – 无需本地邮件服务器即可发送
发送具有多个收件人、抄送、密送和回复地址的电子邮件
适用于无法读取 HTML 电子邮件的邮件客户端的多部分/替代电子邮件
添加附件,包括内联
支持 UTF-8 内容和 8bit、base64、二进制和引用可打印编码
通过 SMTPS 和 SMTP+STARTTLS 传输使用 LOGIN、PLAIN、CRAM-MD5 和 XOAUTH2 机制进行 SMTP 身份验证
自动验证电子邮件地址
防止标头注入攻击
超过 50 种语言的错误消息!
DKIM 和 S/MIME 签名支持
兼容 PHP 5.5 及更高版本,包括 PHP 8.2
命名空间以防止名称冲突
更多!
为什么你可能需要它
许多 PHP 开发人员需要从代码中发送电子邮件。唯一的……
🙋 目的: 一个功能齐全的 PHP 电子邮件创建和传输类 🌠 GitHub 星标: 12,422 🔗 URL: phpmailer/phpmailer
11. Firebase / PHP-JWT
PHP-JWT
一个在 PHP 中编码和解码 JSON Web 令牌(JWT)的简单库,符合 RFC 7519 。
安装
使用 Composer 管理你的依赖项并下载 PHP-JWT:
composer require firebase/php-jwt
Enter fullscreen mode
Exit fullscreen mode
或者, paragonie/sodium_compat
如果您的 php 环境没有安装 libsodium,请从 composer 安装软件包:
composer require paragonie/sodium_compat
Enter fullscreen mode
Exit fullscreen mode
例子
use Firebase \JWT \JWT
use Firebase \JWT \Key ;
$ key = 'example_key ' ;
$ payload = [
'iss ' => 'http://example.org ' ,
'aud ' => 'http://example.com ' ,
'iat ' => 1356999524 ,
'nbf ' => 1357000000
];
/**
* IMPORTANT:
* You must specify supported algorithms for your application. See
* https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40
* for a list of spec-compliant algorithms.
*/
$ jwt = JWT ::encode ($ payload , $ key , 'HS256 ' );
$ decoded = JWT ::…
Enter fullscreen mode
Exit fullscreen mode
🙋 目的: 一个在 PHP 中对 JSON Web Tokens (JWT) 进行编码和解码的简单库,符合 RFC 7519 🌠 GitHub 星标: 4,574 🔗 URL: firebase/php-jwt
12. Hassankhan/配置
Config 是一个轻量级的配置文件加载器,支持 PHP、INI、XML、JSON 和 YAML 文件
配置
Config 是一个文件配置加载器,支持 PHP、INI、XML、JSON YML、Properties 以及序列化文件和字符串。
要求
配置需要 PHP 7.4+。
重要提示: 如果您想使用 YAML 文件或字符串,则 需要 在 composer.json
.
安装
支持通过 Composer 安装 Config。
$ composer require hassankhan/config
Enter fullscreen mode
Exit fullscreen mode
用法
Config 的设计非常简单易用。你只需要加载、获取和设置即可。
加载文件
Config
可以通过工厂方法创建对象,也可以通过直接实例化来创建 对象 load()
:
use Noodlehaus \Config
use Noodlehaus \Parser \Json ;
// Load a single file
$ conf = Config ::load ('config.json ' );
$ conf = new Config ('config.json ' );
// Load values from multiple files
$ conf = new Config ([' …
Enter fullscreen mode
Exit fullscreen mode
🙋 用途: Config 是一个轻量级的配置文件加载器,支持 PHP、INI、XML、JSON 和 YAML 文件 🌠 GitHub 星数: 749 🔗 URL: hassankhan/config
工具
作为一名 PHP 工匠,以下工具是我的工具包中必备的工具。其中大多数( shellcheck除外)都可以通过 composer 安装 ,这样您就可以将它们作为开发依赖项添加到项目的 中 composer.json
。
1. 作曲家
🙋 用途: 必备的 PHP 依赖管理器,以及更多功能 🌠 GitHub 星标: 18,049 🔗 URL: Composer
2. PHPUnit
🙋 目的: 具有模拟功能的出色单元测试框架 🌠 GitHub 星标: 12,785🔗 URL : PHPUnit
3. PHP代码嗅探器
PHP_CodeSniffer 对 PHP 文件进行标记并检测违反定义的一组编码标准的情况。
关于
PHP_CodeSniffer 是一套包含两个 PHP 脚本的程序;主 phpcs
脚本用于对 PHP、JavaScript 和 CSS 文件进行标记,以检测是否存在违反既定编码标准的情况;第二个 phpcbf
脚本用于自动纠正违反编码标准的错误。PHP_CodeSniffer 是一款必不可少的开发工具,可确保您的代码保持简洁一致。
要求
PHP_CodeSniffer 需要 PHP 5.4.0 或更高版本,但个别嗅探功能可能存在其他要求,例如需要外部应用程序和脚本。请参阅 “配置选项”手册页, 了解这些要求的列表。
如果您作为团队的一部分使用 PHP_CodeSniffer,或者在CI 服务器上运行它,则可能需要 使用配置文件来 配置项目的设置 。
安装
开始使用 PHP_CodeSniffer 的最简单方法是下载每个 Phar 文件...
🙋 用途: 静态分析工具,用于检测和修复编码标准违规 🌠 GitHub 星标: 5,915 🔗 URL: squizlabs/php_codesniffer
4. PHP 混乱检测器(又名 phpmd)
🙋 用途: 静态分析工具 , 用于检测代码异味、不良设计、错误、未使用的参数等。🌠 GitHub 星数: 1,315 🔗 URL: phpmd/phpmd
5. PHP 编码标准修复器(又名 php-cs-fixer)
🙋 目的: 自动修复违反编码标准的行为 🌠 GitHub 星数: 7,036 🔗 URL: friendsofphp/php-cs-fixer
6. SensioLabs 安全检查器
🙋 用途: SensioLabs 安全检查器是一个命令行工具,用于检查您的应用程序是否使用具有已知安全漏洞的依赖项 🌠 GitHub 星标: 1,397 🔗 URL: sensiolabs/security-checker
7. XML Linter
一个用于从命令行检查和验证 xml 文件的 php 工具。
可扩展 XML Lint
一个用于从命令行检查和验证 xml 文件的 php 工具。
XML Lint 检查任何 xml 文件的语法并根据文件中定义的 XSD 模式验证该文件。
用法
使用 Composer 安装
如果你想使用 composer 将此库包含在你的项目中,只需运行:
composer require "sclable/xml-lint"
命令行用法
要检查单个 xml 文件:
vendor/bin/xmllint path/to/file.xml
要检查目录及其所有子目录:
vendor/bin/xmllint path/to/dir
帮助
xmllint
已内置 cli 帮助屏幕:
vendor/bin/xmllint --help
选项
-v
详细地显示当前要检查的文件的文件名
-r 0
不要递归搜索(如果参数是目录)
-e name
排除包含“名称”的文件或目录
-s
跳过 xsd 验证
发展
运行测试
# check code style
php tools/php-cs-fixer/vendor/bin/php-cs-fixer fix --dry-run -v
# run tests
php vendor/bin/phpunit
php vendor/bin/behat
Enter fullscreen mode
Exit fullscreen mode
使用docker:
# Example
docker…
Enter fullscreen mode
Exit fullscreen mode
🙋 用途: 一个用于从命令行检查和验证 XML 文件的 PHP 工具 🌠 GitHub 星数: 6 🔗 URL: sclable/xml-lint
8. YAML Linter
用于验证 YAML 文件的紧凑命令行 linting 工具。
yaml-lint
一个紧凑的命令行 linting 工具,用于验证 YAML 文件,使用Symfony Yaml 组件 的解析功能 。
用法
usage: yaml-lint [options] [input source]
input source Path to file(s), or "-" to read from standard input
-q, --quiet Restrict output to syntax errors
-h, --help Display this help
-V, --version Display application version
安装
作曲家
要开始在项目中使用 yaml-lint,请使用 Composer 安装它:
composer require --dev j13k/yaml-lint
Enter fullscreen mode
Exit fullscreen mode
然后它可以从项目的 vendor/bin
目录运行。
要全局设置 yaml-lint,请将其安装在 Composer 主目录中:
composer global require j13k/yaml-lint
Enter fullscreen mode
Exit fullscreen mode
bin
然后它可以从Composer 主目录 运行(通常是 ~/.composer/vendor/bin
)。
二进制
每个版本发布 时,都会提供一个二进制版本 yaml-lint.phar
可供下载 。它嵌入了发布时最新的 Symfony Yaml 组件的稳定版本。
…
🙋 用途: 用于检查 YAML 文件语法的紧凑命令行实用程序 🌠 GitHub 星数: 3🔗 URL: j13k/yaml-lint
9. Dockerfile Linter
dockerfile-lint
基于规则的 Dockerfiles ' linter'。linter 规则可用于检查文件语法以及规则文件编写者确定的任意语义和最佳实践属性。linter 还可用于检查针对 docker 镜像的 LABEL 规则。
目录
快速入门
切换到 Dockerfile 所在的目录
跑步
原子 CLI
atomic run projectatomic/dockerfile-lint
atomic run projectatomic/dockerfile-lint image <imageid>
Docker 命令行界面
docker run -it --rm -v $PWD:/root/ \
projectatomic/dockerfile-lint \
dockerfile_lint [-f Dockerfile]
docker run -it --rm -v $PWD:/root/ \
-v /var/run/docker.sock:/var/run/docker.sock \
projectatomic/dockerfile-lint \
dockerfile_lint image <imageid>
默认情况下,linter 以严格模式运行(错误和/或警告会导致非零返回码)。使用 -p
或运行 --permissive
以下命令……
🙋 目的: 基于规则的 Dockerfile linter 🌠 GitHub 星标: 259 🔗 URL: projectatomic/dockerfile_lint
10. Shellcheck
ShellCheck,一个用于 Shell 脚本的静态分析工具
ShellCheck——shell脚本静态分析工具
ShellCheck 是一个 GPLv3 工具,可以为 bash/sh shell 脚本提供警告和建议:
ShellCheck 的目标是
指出并澄清导致 shell 给出神秘错误消息的典型初学者语法问题。
指出并澄清导致 shell 行为异常和违反直觉的典型中级语义问题。
指出细微的警告、极端情况和陷阱,这些可能会导致高级用户的原本可以正常工作的脚本在未来的情况下失败。
请参阅 错误代码库 ,了解 ShellCheck 可以帮助您识别的示例!
目录
🙋 用途: shell 脚本的静态分析工具 🌠 GitHub 星标: 13,440 🔗 URL: koalaman/shellcheck
11. Swagger 命令行工具
🙋 用途: 验证 JSON 或 YAML 格式的 Swagger/OpenAPI 文件 🌠 GitHub 星数: 125 🔗 URL: APIDevTools/swagger-cli
所有这些工具都可以自动运行:
在你的 IDE 中
在 git hook 中
在您的 CI/CD 管道中
如果您想了解更多,请查看我以前的一篇文章:
谢谢阅读。
再见!
文章来源:https://dev.to/biros/my-php-toolkit-to-build-a-quite-frameworkless-app-5f8g