用PHP即时捕捉PHP中的错误并发送email通知的实现代码_php技巧
开发PHP的朋友都知道,其实最担心的就是程序中出现一些异常或错误,这些状况如果输出到用户的萤幕会把用户给吓坏,甚至为此丢了工作,如果不输出到萤幕就得想办法记录到日志中,但是似乎不是每个人都有查看错误日志的习惯,爲了解决这个尴尬的问题,所以我写了这段代码,其用意就是当我们写的php程式出错的时候把错误内容捕捉出来然后发到我们的email内.
先看效果:
Define('SYS_DEBUG',false);
IF(SYS_DEBUG) {
ini_set('display_errors','on');
Error_reporting(E_ALL);//上线后使用该设定Error_reporting(E_ERROR | E_WARNING | E_PARSE);
}Else{
ini_set('display_errors','off');
Error_reporting(0);
}
//错误捕捉
Register_shutdown_function('Fun::Error');
Class Fun{
/**
通用出错处理
参数:
要输出的内容,是否终止执行程序
说明:
有传值时该函式可以用来输出自定义的错误内容
另外还可以配合Register_shutdown_function实现自动抓取错误内容,并将抓取的错误内容发送到Email内
Register_shutdown_function的机制是程序执行完毕或中途出错时调用函数
如果是自动抓取错误时被调用,则会取得最后一次出错的内容,如果发现没有错误内容则跳出
返回:
内容会被直接输出至萤幕或Email内
用法:
Fun::Error('错误内容');
Fun::Error('错误内容',False);
/**/
Public Static Function Error($M='',$E=True){
$ErrTpl='
{$M} |
$M=Trim($M);
IF($M!='') {//手工调用
$M=' 注意: '.$M;
Echo Strtr($ErrTpl,Array('{$M}'=>$M));unSet($ErrTpl);
IF($E===True) {Die();}
Return ;
}Else{//程式执行完毕自动抓取错误时调用
$M=error_get_last();//取得最后产生的错误
IF(!Is_array($M) Or Count($M)IF(!File_Exists($M['file'])) {Unset($M);Return ;}
//取得5行出错关键代码,如果取不到内容,说明出错档桉不存在
$E=Array_slice(File($M['file']),($M['line']-4),5);
IF(!Is_array($E)) {Unset($M,$E);Return ;}
$E['M']='';
For($i=0;$i$E[$i]=isSet($E[$i]) ? $E[$i] : '';
$E['M'].=' ';
$E['M'].=($i==3) ? ''.(($M['line']-3)+($i+1)).'' : (($M['line']-3)+($i+1));
$E['M'].=': '.Htmlspecialchars($E[$i],ENT_QUOTES,'UTF-8').'
';
}
$E=&$E['M'];
$M='自动捕捉到有错误产生!
错误描述:
'.$M['file'].'的第'.$M['line'].'行出现了类型为'.$M['type'].'的错误:
'.$M['message'].'
关键代码:
'.$E.'
'.self::now('Y-m-d H:i:s',time()).'
';
$M=Strtr($ErrTpl,Array('{$M}'=>$M));unSet($ErrTpl);
$G=seft::getG('SYS','config');
IF(!self::Mail2($G['Spe'],'警告: '.$G['Tit'].' 出现 PHP 程式错误!',$M) And SYS_DEBUG===True){
throw new Exception('警告: '.$G['Tit'].' 出现 PHP 程式错误!
'.$M);
}
IF(SYS_DEBUG) {Echo $M;}
unSet($E,$M,$G);
Die();
}
}
/**
发送电邮
参数:
收件人,邮件标题(不可有换行符),邮件内容(行与行之间必须用\n分隔,每行不可超过70个字符)
说明:
调用PHP内置函式Mail发送电邮
返回:
返回布尔值
用法:
$IsSend=Fun::Mail2($email,$tit,$msg);
/**/
Public Static Function Mail2($to,$tit,$msg) {
IF(Filter_var($to,FILTER_VALIDATE_EMAIL)==''){
throw new Exception('电邮地址错误!');
}
$tit='=?UTF-8?B?'.Base64_Encode($tit).'?=';
$msg = str_replace("\n.","\n..",$msg); //Windows如果在一行开头发现一个句号则会被删掉,要避免此问题将单个句号替换成两个句号
Return Mail($to,$tit,$msg,'From:'.seft::getG('config/SYS/Mal')."\n".'Content-Type:text/html;charset=utf-8');
}
}

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Jika anda menemui mesej ralat semasa menggunakan pencetak anda, seperti operasi tidak dapat diselesaikan (ralat 0x00000771), ini mungkin kerana pencetak telah diputuskan sambungan. Dalam kes ini, anda boleh menyelesaikan masalah melalui kaedah berikut. Dalam artikel ini, kami akan membincangkan cara membetulkan isu ini pada Windows 11/10 PC. Keseluruhan mesej ralat berkata: Operasi tidak dapat diselesaikan (ralat 0x0000771). Pencetak yang ditentukan telah dipadamkan. Betulkan 0x00000771 Ralat Pencetak pada Windows PC Untuk membetulkan Ralat Pencetak operasi tidak dapat diselesaikan (Ralat 0x0000771), pencetak yang ditentukan telah dipadamkan pada Windows 11/10 PC, ikut penyelesaian ini: Mulakan semula Print Spool

Adakah Windows Sandbox ditamatkan dengan Windows Sandbox Unable to Start, Ralat 0x80070005, Access Denied message? Sesetengah pengguna melaporkan bahawa Windows Sandbox tidak boleh dibuka. Jika anda juga menghadapi ralat ini, anda boleh mengikuti panduan ini untuk membetulkannya. Windows Sandbox gagal dimulakan - Access Denied Jika Windows Sandbox ditamatkan dengan Windows Sandbox Unable to Start, Ralat 0x80070005, Access Denied message, pastikan anda log masuk sebagai pentadbir. Ralat jenis ini biasanya disebabkan oleh kebenaran yang tidak mencukupi. Jadi cuba log masuk sebagai pentadbir dan lihat sama ada itu menyelesaikan masalah itu. Jika masalah berterusan, anda boleh mencuba penyelesaian berikut: Jalankan Wi-Fi sebagai pentadbir

Menyahsulit kod status HTTP 460: Mengapakah ralat ini berlaku? Pengenalan: Dalam penggunaan rangkaian harian, kami sering menghadapi pelbagai gesaan ralat, termasuk kod status HTTP. Kod status ini ialah mekanisme yang ditakrifkan oleh protokol HTTP untuk menunjukkan pemprosesan permintaan. Di antara kod status ini, terdapat kod ralat yang agak jarang berlaku, iaitu 460. Artikel ini akan menyelidiki kod ralat ini dan menerangkan sebab ralat ini berlaku. Definisi kod status HTTP 460: Pertama, kita perlu memahami asas kod status HTTP

Apabila ramai rakan menghidupkan komputer untuk menyambung ke jalur lebar, komputer menggesa ralat 651. Apakah keadaan 651 disebabkan oleh kegagalan sambungan antara komputer terminal pengguna dan peralatan pejabat pusat China Netcom mungkin pemutusan sambungan luaran atau masalah dengan peralatan , kami boleh menghubungi operator untuk menyelesaikannya, atau periksa peranti Mari lihat tutorial khusus. Kaedah tutorial terperinci untuk menyelesaikan masalah sambungan jalur lebar komputer 651 ralat 1: Kegagalan pemacu kad rangkaian 1. Mula-mula pertimbangkan masalah pemacu kad rangkaian Masalah ini agak biasa 2. Pilih "Pengurusan Peranti" pada peranti halaman sifat komputer" untuk masuk. 3. Pada halaman Pengurus Peranti, cari "Penyesuai Rangkaian". Biasanya terdapat dua kad rangkaian, satu berwayar dan satu tanpa wayar.

Jadual Kandungan Penyelesaian 1 Penyelesaian 21. Padamkan fail sementara Windows Update 2. Membaiki fail sistem yang rosak 3. Lihat dan ubah suai entri pendaftaran 4. Matikan kad rangkaian IPv6 5. Jalankan alat WindowsUpdateTroubleshooter untuk membaiki 6. Matikan firewall dan perisian anti-virus lain yang berkaitan. 7. Tutup perkhidmatan WidowsUpdate. Penyelesaian 3 Penyelesaian 4 Ralat "0x8024401c" berlaku semasa kemas kini Windows pada komputer Huawei Gejala Masalah Punca Penyelesaian Masih tidak diselesaikan? Baru-baru ini, pelayan web perlu dikemas kini kerana kelemahan sistem Selepas log masuk ke pelayan, kemas kini menggesa kod ralat 0x8024401c

AutoCAD adalah salah satu perisian reka bentuk lukisan yang paling biasa digunakan, tetapi apabila kami ingin menggunakannya pada win11, kami mungkin menghadapi ralat semasa memasang autocad pada win11 Pada masa ini, kami boleh cuba mengubah suai pendaftaran untuk menyelesaikannya. Ralat berlaku semasa memasang autocad dalam win11: Langkah pertama, tekan "logo win + r" pada papan kekunci untuk membuka larian. Dalam langkah kedua, masukkan "regedit" dan tekan Enter untuk membuka pendaftaran. 3. Tampal "Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" ke dalam laluan di atas. 4. Selepas memasukkan, klik dua kali

Petua Praktikal untuk Menyelesaikan Ralat Tomcat404 dengan Pantas Tomcat ialah pelayan aplikasi JavaWeb yang biasa digunakan dan sering digunakan semasa membangunkan dan menggunakan aplikasi JavaWeb. Walau bagaimanapun, kadangkala kita mungkin menghadapi ralat 404 daripada Tomcat, yang bermaksud bahawa Tomcat tidak dapat mencari sumber yang diminta. Ralat ini boleh disebabkan oleh pelbagai faktor, tetapi dalam artikel ini, kami akan membincangkan beberapa penyelesaian dan petua biasa untuk membantu anda menyelesaikan ralat Tomcat 404 dengan cepat. Semak laluan URL

Jika anda menghadapi kod ralat 0x80070003 semasa menggunakan Hyper-V untuk mencipta atau memulakan mesin maya, ia mungkin disebabkan oleh isu kebenaran, kerosakan fail atau ralat konfigurasi. Penyelesaian termasuk menyemak kebenaran fail, membaiki fail yang rosak, memastikan konfigurasi yang betul dan banyak lagi. Masalah ini boleh diselesaikan dengan menolak kemungkinan yang berbeza satu demi satu. Keseluruhan mesej ralat kelihatan seperti ini: Pelayan mengalami ralat semasa membuat [nama mesin maya]. Tidak dapat mencipta mesin maya baharu. Tidak dapat mengakses stor konfigurasi: Sistem tidak dapat mencari laluan yang ditentukan. (0x80070003). Beberapa kemungkinan punca ralat ini termasuk: Fail mesin maya rosak. Ini boleh berlaku disebabkan oleh serangan perisian hasad, virus atau adware. Walaupun kemungkinan ini berlaku adalah rendah, anda tidak boleh sepenuhnya
