rothkj1022 / php-error-handler
PHP Error Handler can send you comprehensive error reports via email as well as output to the screen if you so choose.
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 Error Handler can send you comprehensive error reports via email as well as output to the screen if you so choose.
Features:
- Get notified via email of php errors occurring on your website
- Option to use mysqli or pdo database connection
- Send error reports via email, display to the screen, or both
- Can log all errors in a database, with customizable retention period
- Flood control makes sure you don't get blasted with multiple emails with the same error within a configurable time period
- Send to one or more email recipients, including cc and bcc options
- Only send reports for the error types you choose (errors, warnings, notices, deprecations)
Written by: Kevin Roth - https://kevinroth.com
License
Released under the MIT license - http://opensource.org/licenses/MIT
Requirements
- PHP >= 5.4
Optional
- MySQL or other PDO compatible database for logging & flood control features
Installation
Run the following command in your command line shell in your php project
$ composer require rothkj1022/php-error-handler
Done.
You may also edit composer.json manually then perform composer update
:
"require": {
"rothkj1022/php-error-handler": "^2.0.0"
}
Getting started
Example usage with composer
require('vendor/autoload.php'); use rothkj1022\PHPErrorHandler; $errorHandler = new PHPErrorHandler\PHPErrorHandler();
Example usage without composer
require('src/class.errorhandler.php'); use rothkj1022\PHPErrorHandler; $errorHandler = new PHPErrorHandler\PHPErrorHandler();
Example with email and database configuration
After including the class file via autoload.php or directly, instantiate the object with a json array like this:
$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' ] ] ]);
Configuration options
General
displayErrors
Display error details to screen (not recommended for production)
default: false
options: boolean (true / false)
emailErrors
Email error reports to configured recipient(s)
default: false
options: boolean (true / false)
logErrors
Log errors to configured database
default: false
options: boolean (true / false)
cacheFolder
Folder for caching lookups, such as ip addresses
default: false
options: string (full path to the cache folder)
purgeLogInterval
If configured, purges logs in database older than the given interval.
Use mysql date_add interval syntax or set to false
default: '1 DAY'
options: string (date_add interval syntax), false
floodInterval
If database is configured, does not send repeat errors via email within set interval
Use mysql date_add interval syntax or set to false
default: '15 MINUTE'
options: string (date_add interval syntax), false
database
Json array of database configuration options
default: []
options: array
MySQL Example:
[
'driver' => 'mysql',
'hostname' => 'localhost',
'username' => 'mysqluser',
'password' => 'mysqlpass',
'database' => 'mydatabase',
'port' => 3306,
'charset' => 'utf8',
'table' => 'error_reports'
]
PDO (with mysql) Example:
[
'driver' => 'pdo',
'dsn' => 'mysql:host=localhost;dbname= mydatabase;port=3306;charset=UTF8',
'username' => 'mysqluser',
'password' => 'mysqlpass'
]
driver
Driver to be used for the database connection
default: 'mysql'
options: 'mysql', 'pdo'
dsn
DSN connection string for PDO connections
default: ''
options: string (pdo dsn connection string)
hostname
Host name of the database server
default: 'localhost'
options: string (server host name)
username
Database user name
default: ''
options: string (db username)
password
Database password
default: ''
options: string, (db password)
database
Database name
default: ''
options: string (db name)
port
Database port
default: 3306
options: integer (port number)
charset
Database character set
default: 'utf8'
options: string (db charset)
table
Database table name for logging error reports
default: 'error_reports'
options: string (db table name)
recipients
Array of to, cc, or bcc types
to, cc, & bcc
Array of contacts (name, address)
address
Email address of the contact
default: null
options: string (valid email address)
name
Name of the contact
default: null
options: string
from
address
Email address of the contact
default: null
options: string (valid email address)
name
Name of the contact
default: null
options: string
replyTo
address
Email address of the contact
default: null
options: string (valid email address)
name
Name of the contact
default: null
options: string
subject
default: 'PHP Error Report from ' . $_SERVER['SERVER_NAME']
options: string
PHPMailer
Json array of email configuration options. See PHPMailer documentation for detailed default options.
CharSet
default: 'utf-8'
options: string
isSMTP
default: false
options: boolean (true, false)
Host
default: 'localhost'
options: string
Port
default: 25
options: integer
SMTPDebug
Get debug info for SMTP sending. See SMTP Debugging for more info.
See also PHPMailer SMTPDebug property documentation
default: 0 (no output)
options: integer
SMTPAutoTLS
Whether to enable TLS encryption automatically if a server supports it, even if `SMTPSecure` is not set to 'tls'.
See also PHPMailer SMTPAutoTLS property documentation
default: true
options: boolean (true, false)
SMTPAuth
Enable SMTP authorization
default: false
options: boolean (true, false)
Username
SMTP account username / email address
default: ''
options: string
Password
SMTP Password
default: ''
options: string
SMTPSecure
Type of encryption used for SMTP sending
default: 'tls'
options: string ('ssl', 'tls')
SMTPOptions
See PHPMailer SMTPOptions property documentation
default: []
options: array
Example
// Disable verification for self-signed ssl certificates
[
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
]
]
errorTypes
Array of PHP error types that you want to be handled
default: [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR]
options: array
warningTypes
Array of PHP warning types that you want to be handled
default: [E_WARNING, E_CORE_WARNING, E_COMPILE_WARNING, E_USER_WARNING, E_RECOVERABLE_ERROR]
options: array
noticeTypes
Array of PHP warning types that you want to be handled
default: [E_NOTICE, E_USER_NOTICE, E_DEPRECATED, E_USER_DEPRECATED]
options: array
handleErrors
Whether or not to process errors
default: true
options: boolean (true, false)
handleWarnings
Whether or not to process warnings
default: true
options: boolean (true, false)
handleNotices
Whether or not to process notices
default: false
options: boolean (true, false)
ipinfoToken
Your API token for ipinfo.io if you have one
default: '';
options: string
Public methods
Plugin method | Description |
---|---|
mysqlError($errorMsg, $sql, $errfile = null, $errline = 0, $die = false) | Send a MySQL-specific error report, including the query. $errorMsg = the error message to send, usually $mysqli->error. $sql = the query. $errfile = the file in which the error occurred, called by using __FILE__. $errline = the line of the file on which the error occurred, called by using __LINE__. $die = whether or not to stop processing the script after sending the error. See example below. |
sendError($errorMsg, $msgDetails = '', $errfile = null, $errline = 0, $die = false) | Send a custom error report. $errorMsg = the error message to send. $msgDetails = further details regarding your custom error. $errfile = the file in which the error occurred, called by using __FILE__. $errline = the line of the file on which the error occurred, called by using __LINE__. $die = whether or not to stop processing the script after sending the error. See example below. |
mysqlError Example:
$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 Example:
$errorHandler->sendError('$myVar is not defined.', 'You should really define that variable.', __FILE__, __LINE__);
Changelog
Version 2.0.7
- Added config var for ipinfo.io API token
- Fixed flood control
Version 2.0.6
- Updated ip address lookups to fetch with Guzzle for better reliability.
- Added cacheFolder option for caching remote lookups
Version 2.0.5
- Added config var for allowing change of PHPMailer SMTPAutoTLS setting
Version 2.0.4
- Added config vars for allowing change of reply-to address
Version 2.0.3
- Added config vars to disable processing errors, warnings, and notices
Version 2.0.1 & 2.0.2
- Fixes for composer integration
Version 2.0.0
- Code overhaul with composer integration
- Added changelog, readme documentation
- Enhancement: added PDO database option