rothkj1022 / php-error-handler
PHP 错误处理器可以通过电子邮件发送详细的错误报告,也可以根据您的选择在屏幕上输出。
Requires
- php: ^5.4 || ^7.0 || ^8.0
- guzzlehttp/guzzle: ^6.3
- phpmailer/phpmailer: ^6.5.0
- rothkj1022/php-cache-class: ^2.1.2
- symfony/var-dumper: ^4.2
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)
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数据库选项