mootly/mp_errors

MoosePlum 错误管理类

v1.0.0 2022-11-02 13:35 UTC

This package is auto-updated.

Last update: 2024-09-09 22:21:07 UTC


README

这是 MoosePlum 所用错误类的独立版本,供那些想要为 PHP 应用程序实现真正简单的应用程序错误记录器的人使用。

这是用于记录应用程序内部的错误,这些错误不会(并且在大多数情况下不应)生成系统错误。

警告

这不是一个安全解决方案。

错误日志存储在一个默认仅存储最后100条条目的内部数组中。

该类还存储一个用于报告的状态消息数组。它从默认集开始,可以添加到其中。

此类的核心功能是标准化应用程序中所有对象之间的错误记录。

系统需求

要求很简单。

  • 这是使用 PHP 8.1 开发的。它应该可以在 PHP 7.0 及以上版本中运行,但尚未进行向后兼容性测试。
  • 一个 Web 服务器,这究竟有什么意义呢?

依赖项

无。

默认值

此类默认命名空间为 'mpc',代表 'MoosePlum 类'。

此类定义的默认位置应在您的供应商库中。对于与其他 MoosePlum 项目的整合,应为 /_lib/mootly/mp_errors/

资源

本组文件如下

安装

手动安装

将此类定义和任何依赖项放入您的供应商库中。对于与其他 MoosePlum 项目的整合,应为 /_lib/mootly/mp_errors/

使用您首选的方法将类包含到代码中。

Composer 安装

此类定义已在 Packagist 上列出,可以使用 Composer 进行安装。

有关在您的系统上正确安装 Composer 的说明,请参阅 Composer 网站。

安装并运行 Composer 后,请将以下代码添加到您网站根目录下的 composer.json 文件中。

确保以下内容列为必需。根据需要调整版本号。请参阅此类定义中的 composer.json,以获取此版本包所需的依赖项的版本。

"require": {
  "php": ">=8.0.0",
  "mootly/mp_errors": "*",
}

如果您的配置需要,请确保在您的 composer.json 中列出以下自动加载定义。根据需要调整路径的第一步,以匹配您的供应商库位置。

"autoload": {
  "classmap": [
    "_lib/mootly/mp_errors",
  ]
}

在您选择的终端应用程序中,导航到您网站的根目录,并运行以下命令。(根据您安装 composer 的方式,此命令可能不同。)

composer update

这将在此类定义的供应商库中安装此类定义和任何相关依赖项,并将 composer 设置为将它们链接到您的应用程序。

为了安全起见,您还可以运行以下命令来重建 composer 自动加载器,并确保您的类已正确注册。

composer dump-autoload -o

在使用此类定义之前,请确保在页面或应用程序初始化代码中包含以下行。根据您供应商库的位置进行调整。

require_once "<site root>/<vendor lib>/autoload.php";

这应该是您需要做的全部工作,以便将其启动并运行。

配置

如果您使用自动加载,建议的实例化方法是以下:

if (!isset($mpo_errors)) { $mpo_errors  = new \mpc\mpc_errors(); }

构造函数接受三个可选参数。

  1. 状态码(数组)- 一组状态码。请参见下面的格式。
  2. 替换标志(布尔值)- 是否允许在匹配新条目时替换现有状态码。默认为false。设置为true将随时覆盖。
  3. 日志大小(整数)- 状态日志的长度。默认为100。

建议您创建一个单独的类实例,并将其作为依赖项加载到其他对象中。例如

if (!isset($mpo_secure)) { $mpo_secure  = new \mpc\mpc_secure($mpo_errors); }

用法

强烈建议使用命名空间或其他唯一标识符来创建用于锁定的唯一字符串。

示例

  • mpo_parts::main_body
  • mpo_menus::main_nav::home_link

自动生成示例

  • get_class().'::'.someProp
  • get_class().'::'.__METHOD__
  • get_class().'_'.self::$iCount++(用于多个实例)

为了安全起见,为给定类的所有调用始终使用某种类型的哈希。这可以防止没有访问私有属性的人覆盖任何锁。PHP哈希生成器示例

  • php md5(get_class())
  • md5(rand())
  • uniqid()
  • bin2hex(random_bytes(16))

由于这些哈希值仅在PHP生成并发送HTTP响应的时间内持续存在,因此不需要过度安全。在哈希值消失之前只有几毫秒的时间来猜测哈希值。

MoosePlum类在实例化时定义以下属性以确保名称唯一。

$this->classRef = bin2hex(random_bytes(8)).'::'.get_class();

状态码数组

状态码存储在数组中。每个数组元素的结构如下

string status code => [ string severity, string message ]

例如,这些是预定义的状态码。

'none'          => ['Notice'  ,'Success.'],
'noAction'      => ['Notice'  ,'No action taken.'],
'mpe_set00'     => ['Warning' ,'Some properties already exist and were not replaced.'],
'mpe_set01'     => ['Warning' ,'This property already exists and was not replaced.'],
'mpe_locked'    => ['Warning' ,'Requested property is locked from updates.'],
'mpe_secure'    => ['Warning' ,'Requested property is secured from further updates.'],
'unknown'       => ['Error'   ,'Unknown error code.'],
'mpe_null'      => ['Error'   ,'Requested value or property does not exist.'],
'mpe_nomethod'  => ['Error'   ,'Requested method does not exist.'],
'mpe_badURL'    => ['Error'   ,'Invalid URL.'],
'mpe_param00'   => ['Error'   ,'Invalid parameter.'],
'mpe_param01'   => ['Error'   ,'Invalid history length.'],
'mpe_param02'   => ['Error'   ,'Attempted to add invalid error message entry.'],
'mpe_param03'   => ['Error'   ,'Too few parameters.'],
'mpe_param04a'  => ['Error'   ,'Too many parameters.'],
'mpe_param04b'  => ['Warning' ,'Too many parameters. Not all were processed.'],

状态日志

将状态消息添加到以下定义的数组中

log => [
  success  => bool
  code     => string  // status code from status code array
  source   => string  // calling class and method
  severity => string  // severity from status code array
  message  => string  // message from status code array
]

该数组作为堆栈使用,后进先出。最新状态码位于位置0。

get()调用将返回具有上述值的最后一个记录的数组,或者在请求超出范围时返回false。

方法

setStatus

将条目添加到状态日志。请参阅上述状态日志的结构。

public setStatus(string code, ?string source) : bool

如果状态日志超出最大大小,则删除最旧的元素。

如果没有指定来源,则记录为'未指定来源'。

如果状态码不在状态码数组中,则返回false。

getStatus

返回最近记录的状态消息作为数组(请参阅上述内容),或返回调用中指定的消息。最新消息的位置为0。

如果请求超出范围,则返回false。

public getStatus(int index) : array|bool

getStatusCodes

返回所有可用错误代码的数组。

此方法不接受任何参数。

public getStatusCodes() : array

getStatusCount

返回状态日志中的消息数量。

此方法不接受任何参数。

public getStatusCount() : int

addStatusCodes

提交要添加到状态码数组中的错误代码数组。

传递为true的替换标志以在匹配的情况下覆盖现有代码。

请参阅上述状态码数组结构。

public addStatusCodes(array codes, bool replace) : bool