rothkj1022/php-error-handler

PHP 错误处理器可以通过电子邮件发送详细的错误报告,也可以根据您的选择在屏幕上输出。

2.1.1 2022-02-08 20:47 UTC

This package is auto-updated.

Last update: 2024-09-09 02:54:23 UTC


README

PHP 错误处理器可以通过电子邮件发送详细的错误报告,也可以根据您的选择在屏幕上输出。

特性

  • 通过电子邮件通知您网站上发生的 PHP 错误
  • 可选使用 mysqli 或 pdo 数据库连接
  • 可以通过电子邮件、屏幕显示或两者同时发送错误报告
  • 可以在数据库中记录所有错误,具有可自定义的保留期
  • 洪水控制确保您在一定时间内不会收到重复错误的多个电子邮件
  • 发送到一个或多个电子邮件收件人,包括 cc 和 bcc 选项
  • 仅发送您选择的错误类型报告(错误、警告、通知、弃用)

作者:Kevin Roth - https://kevinroth.com

许可证

在 MIT 许可证下发布 - https://open-source.org.cn/licenses/MIT

要求

  • PHP >= 5.4

可选

  • 用于日志记录和洪水控制功能的 MySQL 或其他 PDO 兼容数据库

安装

在您的命令行 shell 中运行以下命令,您的 php 项目

$ composer require rothkj1022/php-error-handler

完成。

您还可以手动编辑 composer.json,然后执行 composer update

"require": {
    "rothkj1022/php-error-handler": "^2.0.0"
}

入门

使用 composer 的示例用法

require('vendor/autoload.php');
use rothkj1022\PHPErrorHandler;

$errorHandler = new PHPErrorHandler\PHPErrorHandler();

不使用 composer 的示例用法

require('src/class.errorhandler.php');
use rothkj1022\PHPErrorHandler;

$errorHandler = new PHPErrorHandler\PHPErrorHandler();

电子邮件和数据库配置示例

通过 autoload.php 或直接包含类文件后,使用如下 json 数组实例化对象

$errorHandler = new PHPErrorHandler\PHPErrorHandler([
	'displayErrors' => false,
	'emailErrors' => true,
	'logErrors' => true, //requires database
	'purgeLogTimeout' => '1 DAY', //use mysql date_add interval syntax or set to false
	//'cacheFolder' => '/tmp/', //Folder for caching lookups, such as ip addresses.  Must end with slash.
	'floodControl' => '15 MINUTE', //use mysql date_add interval syntax or set to false
	'database' => [
		/*'driver' => 'mysql', //pdo or mysql
		'hostname' => DB_HOSTNAME,
		'username' => DB_USERNAME,
		'password' => DB_PASSWORD,
		'database' => DB_DATABASE,
		'port' => DB_PORT,
		'charset' => DB_CHARSET,*/
		'driver' => 'pdo', //pdo or mysql
		'dsn' => 'mysql:host='.DB_HOSTNAME.';dbname='.DB_DATABASE.';port='.DB_PORT.';charset=UTF8',
		'username' => DB_USERNAME,
		'password' => DB_PASSWORD
	],
	'email' => [
		'recipients' => [
			'to' => [
				[
					'address' => 'testguy@domain.com',
					'name' => 'Test Guy'
				]
		],
		'from' => [
			'address' => 'noreply@domain.com',
			'name' => 'No Reply'
		]
	]
]);

配置选项

常规

displayErrors

在屏幕上显示错误详细信息(不建议在生产环境中使用)

default: false
options: boolean (true / false)

emailErrors

将错误报告发送到配置的收件人

default: false
options: boolean (true / false)

logErrors

将错误记录到配置的数据库

default: false
options: boolean (true / false)

cacheFolder

用于缓存查找的文件夹,例如 IP 地址

default: false
options: string (full path to the cache folder)

purgeLogInterval

如果配置,则删除数据库中超过给定间隔的旧日志。

使用 mysql date_add interval 语法或设置为 false

default: '1 DAY'
options: string (date_add interval syntax), false

floodInterval

如果配置了数据库,则在设置的时间间隔内不通过电子邮件发送重复的错误

使用 mysql date_add interval 语法或设置为 false

default: '15 MINUTE'
options: string (date_add interval syntax), false

database

数据库配置选项的 Json 数组

default: []
options: array
MySQL 示例
[
	'driver' => 'mysql',
	'hostname' => 'localhost',
	'username' => 'mysqluser',
	'password' => 'mysqlpass',
	'database' => 'mydatabase',
	'port' => 3306,
	'charset' => 'utf8',
	'table' => 'error_reports'
]
PDO(带 mysql)示例
[
	'driver' => 'pdo',
	'dsn' => 'mysql:host=localhost;dbname= mydatabase;port=3306;charset=UTF8',
	'username' => 'mysqluser',
	'password' => 'mysqlpass'
]

driver

用于数据库连接的驱动程序

default: 'mysql'
options: 'mysql', 'pdo'

dsn

PDO 连接的 DSN 字符串

default: ''
options: string (pdo dsn connection string)

hostname

数据库服务器的主机名

default: 'localhost'
options: string (server host name)

username

数据库用户名

default: ''
options: string (db username)

password

数据库密码

default: ''
options: string, (db password)

database

数据库名

default: ''
options: string (db name)

port

数据库端口

default: 3306
options: integer (port number)

charset

数据库字符集

default: 'utf8'
options: string (db charset)

table

用于记录错误报告的数据库表名

default: 'error_reports'
options: string (db table name)

email

recipients

to、cc 或 bcc 类型的数组

to、cc、& bcc

联系人(姓名、地址)的数组

address

联系人的电子邮件地址

default: null
options: string (valid email address)
name

联系人的姓名

default: null
options: string

from

address

联系人的电子邮件地址

default: null
options: string (valid email address)
name

联系人的姓名

default: null
options: string

replyTo

address

联系人的电子邮件地址

default: null
options: string (valid email address)
name

联系人的姓名

default: null
options: string

subject

default: 'PHP Error Report from ' . $_SERVER['SERVER_NAME']
options: string

PHPMailer

电子邮件配置选项的 Json 数组。有关详细默认选项,请参阅 PHPMailer 文档

CharSet
default: 'utf-8'
options: string
isSMTP
default: false
options: boolean (true, false)
Host
default: 'localhost'
options: string
Port
default: 25
options: integer
SMTPDebug

获取 SMTP 发送调试信息。有关更多信息,请参阅 SMTP 调试

另请参阅 PHPMailer SMTPDebug 属性 文档

default: 0 (no output)
options: integer
SMTPAutoTLS

如果服务器支持,则自动启用 TLS 加密,即使未将 `SMTPSecure` 设置为 'tls'。

另请参阅PHPMailer的SMTPAutoTLS属性文档

default: true
options: boolean (true, false)
SMTPAuth

启用SMTP授权

default: false
options: boolean (true, false)
用户名

SMTP账户用户名/电子邮件地址

default: ''
options: string
密码

SMTP密码

default: ''
options: string
SMTPSecure

用于SMTP发送的加密类型

default: 'tls'
options: string ('ssl', 'tls')
SMTPOptions

请参阅PHPMailer的SMTPOptions属性文档

default: []
options: array
示例
// Disable verification for self-signed ssl certificates
[
	'ssl' => [
		'verify_peer' => false,
		'verify_peer_name' => false,
		'allow_self_signed' => true
	]
]

errorTypes

您希望处理的PHP错误类型数组

default: [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR]
options: array

warningTypes

您希望处理的PHP警告类型数组

default: [E_WARNING, E_CORE_WARNING, E_COMPILE_WARNING, E_USER_WARNING, E_RECOVERABLE_ERROR]
options: array

noticeTypes

您希望处理的PHP警告类型数组

default: [E_NOTICE, E_USER_NOTICE, E_DEPRECATED, E_USER_DEPRECATED]
options: array

handleErrors

是否处理错误

default: true
options: boolean (true, false)

handleWarnings

是否处理警告

default: true
options: boolean (true, false)

handleNotices

是否处理通知

default: false
options: boolean (true, false)

ipinfoToken

如果您有的话,您的ipinfo.io API令牌

default: '';
options: string

公共方法

mysqlError 示例
$mysqli = new mysqli(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE, DB_PORT);

$sql = "select blah from products limit 3";
$query = $mysqli->query($sql) or $errorHandler->mysqlError($mysqli->error, $sql, __FILE__, __LINE__);

sendError 示例
$errorHandler->sendError('$myVar is not defined.', 'You should really define that variable.', __FILE__, __LINE__);

变更日志

版本 2.0.7

  • 添加了ipinfo.io API令牌的配置变量
  • 修复了洪水控制

版本 2.0.6

  • 更新了IP地址查找,使用Guzzle获取以获得更好的可靠性。
  • 添加了cacheFolder选项以缓存远程查找

版本 2.0.5

  • 添加了允许更改PHPMailer SMTPAutoTLS设置的配置变量

版本 2.0.4

  • 添加了允许更改回复地址的配置变量

版本 2.0.3

  • 添加了禁用处理错误、警告和通知的配置变量

版本 2.0.1 & 2.0.2

  • 对composer集成的修复

版本 2.0.0

  • 与composer集成进行代码重构
  • 添加了变更日志、readme文档
  • 增强:添加了PDO数据库选项