用PHP即時捕捉PHP原始碼中的錯誤并發送email通知,javaemail发送_PHP教程
用PHP即時捕捉PHP原始碼中的錯誤并發送email通知,javaemail发送
開發PHP的朋友都知道,其實最擔心的就是程序中出現一些異常或錯誤,這些狀況如果輸出到用戶的螢幕會把用戶給嚇壞,甚至為此丟了工作,如果不輸出到螢幕就得想辦法記錄到日誌中,但是似乎不是每個人都有查看錯誤日誌的習慣,爲了解決這個尷尬的問題,所以我寫了這段代碼,其用意就是當我們寫的php程式出錯的時候把錯誤內容捕捉出來然後發到我們的email內.
先看效果:
<span>Define</span>('SYS_DEBUG',<span>false</span><span>); </span><span>IF</span><span>(SYS_DEBUG) { </span><span>ini_set</span>('display_errors','on'<span>); </span><span>Error_reporting</span>(<span>E_ALL</span>);<span>//</span><span>上線后使用該設定Error_reporting(E_ERROR | E_WARNING | E_PARSE);</span> }<span>Else</span><span>{ </span><span>ini_set</span>('display_errors','off'<span>); </span><span>Error_reporting</span>(0<span>); } </span><span>//</span><span>錯誤捕捉</span> <span>Register_shutdown_function</span>('Fun::Error'<span>); </span><span>Class</span><span> Fun{ </span><span>/*</span><span>* 通用出錯處理 参数: 要輸出的內容,是否終止執行程序 說明: 有傳值時該函式可以用來輸出自定義的錯誤內容 另外還可以配合Register_shutdown_function實現自動抓取錯誤內容,並將抓取的錯誤內容發送到Email內 Register_shutdown_function的機制是程序執行完畢或中途出錯時調用函數 如果是自動抓取錯誤時被調用,則會取得最後一次出錯的內容,如果發現沒有錯誤內容則跳出 返回: 內容會被直接輸出至螢幕或Email內 用法: Fun::Error('錯誤內容'); Fun::Error('錯誤內容',False); /*</span><span>*/</span> <span>Public</span> <span>Static</span> <span>Function</span> Error(<span>$M</span>='',<span>$E</span>=<span>True</span><span>){ </span><span>$ErrTpl</span>='<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><table cellspacing="0" cellpadding="0" border="0"><tr><td>; </span><span>$M</span>=<span>Trim</span>(<span>$M</span><span>); </span><span>IF</span>(<span>$M</span>!='') {<span>//</span><span>手工調用</span> <span>$M</span>=' <b>注意:</b> '.<span>$M</span><span>; </span><span>Echo</span> <span>Strtr</span>(<span>$ErrTpl</span>,<span>Array</span>('{$M}'=><span>$M</span>));<span>unSet</span>(<span>$ErrTpl</span><span>); </span><span>IF</span>(<span>$E</span>===<span>True</span>) {<span>Die</span><span>();} </span><span>Return</span><span> ; }</span><span>Else</span>{<span>//</span><span>程式執行完畢自動抓取錯誤時調用</span> <span>$M</span>=error_get_last();<span>//</span><span>取得最後產生的錯誤</span> <span>IF</span>(!<span>Is_array</span>(<span>$M</span>) Or <span>Count</span>(<span>$M</span>)<4) {<span>Unset</span>(<span>$M</span>);<span>Return</span><span> ;} </span><span>IF</span>(!<span>File_Exists</span>(<span>$M</span>['file'])) {<span>Unset</span>(<span>$M</span>);<span>Return</span><span> ;} </span><span>//</span><span>取得5行出錯關鍵代碼,如果取不到內容,說明出錯檔案不存在</span> <span>$E</span>=<span>Array_slice</span>(<span>File</span>(<span>$M</span>['file']),(<span>$M</span>['line']-4),5<span>); </span><span>IF</span>(!<span>Is_array</span>(<span>$E</span>)) {<span>Unset</span>(<span>$M</span>,<span>$E</span>);<span>Return</span><span> ;} </span><span>$E</span>['M']=''<span>; </span><span>For</span>(<span>$i</span>=0;<span>$i</span><5;<span>$i</span>++<span>) { </span><span>$E</span>[<span>$i</span>]=<span>isSet</span>(<span>$E</span>[<span>$i</span>]) ? <span>$E</span>[<span>$i</span>] : ''<span>; </span><span>$E</span>['M'].=' '<span>; </span><span>$E</span>['M'].=(<span>$i</span>==3) ? '<b>'.((<span>$M</span>['line']-3)+(<span>$i</span>+1)).'</b>' : ((<span>$M</span>['line']-3)+(<span>$i</span>+1<span>)); </span><span>$E</span>['M'].=': '.<span>Htmlspecialchars</span>(<span>$E</span>[<span>$i</span>],ENT_QUOTES,'UTF-8').'<br>'<span>; } </span><span>$E</span>=&<span>$E</span>['M'<span>]; </span><span>$M</span>='<b>自動捕捉到有錯誤產生!</b><br><br><b>錯誤描述:</b><br> <b>'.<span>$M</span>['file'].'</b>的第<b>'.<span>$M</span>['line'].'</b>行出現了類型為<b>'.<span>$M</span>['type'].'</b>的錯誤:<br> '.<span>$M</span>['message'].'<br><br><b>關鍵代碼:</b><br>'.<span>$E</span>.'<br>'.self::now('Y-m-d H:i:s',<span>time</span>()).'<br>'<span>; </span><span>$M</span>=<span>Strtr</span>(<span>$ErrTpl</span>,<span>Array</span>('{$M}'=><span>$M</span>));<span>unSet</span>(<span>$ErrTpl</span><span>); </span><span>$G</span>=seft::getG('SYS','config'<span>); </span><span>IF</span>(!self::Mail2(<span>$G</span>['Spe'],'警告: '.<span>$G</span>['Tit'].' 出現 PHP 程式錯誤!',<span>$M</span>) And SYS_DEBUG===<span>True</span><span>){ </span><span>throw</span> <span>new</span> <span>Exception</span>('警告: '.<span>$G</span>['Tit'].' 出現 PHP 程式錯誤!<br><br>'.<span>$M</span><span>); } </span><span>IF</span>(SYS_DEBUG) {<span>Echo</span> <span>$M</span><span>;} </span><span>unSet</span>(<span>$E</span>,<span>$M</span>,<span>$G</span><span>); </span><span>Die</span><span>(); } } </span><span>/*</span><span>* 发送電郵 参数: 收件人,郵件標題(不可有換行符),郵件內容(行與行之間必須用\n分隔,每行不可超過70個字符) 說明: 調用PHP內置函式Mail發送電郵 返回: 返回布爾值 用法: $IsSend=Fun::Mail2($email,$tit,$msg); /*</span><span>*/</span> <span>Public</span> <span>Static</span> <span>Function</span> Mail2(<span>$to</span>,<span>$tit</span>,<span>$msg</span><span>) { </span><span>IF</span>(Filter_var(<span>$to</span>,FILTER_VALIDATE_EMAIL)==''<span>){ </span><span>throw</span> <span>new</span> <span>Exception</span>('電郵地址錯誤!'<span>); } </span><span>$tit</span>='=?UTF-8?B?'.<span>Base64_Encode</span>(<span>$tit</span>).'?='<span>; </span><span>$msg</span> = <span>str_replace</span>("\n.","\n..",<span>$msg</span>); <span>//</span><span>Windows如果在一行开头发现一个句号则会被删掉,要避免此问题将单个句号替换成两个句号</span> <span>Return</span> <span>Mail</span>(<span>$to</span>,<span>$tit</span>,<span>$msg</span>,'From:'.seft::getG('config/SYS/Mal')."\n".'Content-Type:text/html;charset=utf-8'<span>); } }</span>

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

如果您是一位经验丰富的 PHP 开发人员,您可能会感觉您已经在那里并且已经完成了。您已经开发了大量的应用程序,调试了数百万行代码,并调整了一堆脚本来实现操作

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

PHP的魔法方法有哪些?PHP的魔法方法包括:1.\_\_construct,用于初始化对象;2.\_\_destruct,用于清理资源;3.\_\_call,处理不存在的方法调用;4.\_\_get,实现动态属性访问;5.\_\_set,实现动态属性设置。这些方法在特定情况下自动调用,提升代码的灵活性和效率。
