勉強したことのメモ

webプログラマ見習いが勉強したことのメモ。

エラー処理を1ページにまとめる

      2014/05/23

できるだけまとめておいた方が効率よさそうなのでメモ。

メインのフォルダにlogsファイルを作成し、
下記error.phpを作成。

■error.php
<?
define("ERROR_FILE", "./logs/error.log");
error_reporting(E_ALL ^ E_NOTICE);
ini_set('display_errors',0);
ini_set('log_errors','On');
ini_set("error_log", ERROR_FILE);

function Error_sql ($E_line, $E_sql, $E_error, $E_file, $E_data = '') {
if ($E_error) {
$error = "---------------------\n[SQL error]\n"
. $E_line . "行目\n"
. $E_sql . "\n"
. $E_error . "\n"
. $E_file . "\ntime->"
. date('Y/m/d H:i:s') . "\n"
. $E_data . "\n---------------------\n";
error_log($error, 3, ERROR_FILE);
}
}

if ($_POST['mode'] == 'js_error') {
$error_body = "---------------------\n[JavaScript error]\n"
. $_POST['lineNumber'] . "行目\n"
. $_POST['errorMsg'] . "\n"
. $_POST['errorUrl'] . "\ntime->"
. date('Y/m/d H:i:s') . "\n---------------------\n";
file_put_contents(ERROR_FILE, $error_body, FILE_APPEND);
echo $error_body;
}

$js_error_function = "
<script>
window.onerror = function(errorMsg, errorUrl, lineNumber) {
console.log(1);
$.ajax({
data : {mode : 'js_error', errorMsg : errorMsg, errorUrl : errorUrl, lineNumber : lineNumber},
url : './index.php',
type : 'post'
});
};
</script>
";
?>

■例
<?
require_once("./logs/error.php");
$sql = 'test';
$code = 12345;
mysql_query($sql); //db接続してないのでここでエラー発生
Error_sql(__LINE__, $sql, mysql_error(), $_SERVER["PHP_SELF"], "\ncode->" . $code); //エラーログに書き込み
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transtional//EN" "http://www.w3c.org/TR/html4/loose.dtd">
<meta http-equiv="content-type" content="text/html"/>
<meta cherset = "UTF-8">
<html lang="ja">
<head>
<title>タイトル</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<?=$js_error_function;?>
</head>
<body>
<h1>タイトル</h1>
<input type="button" value="error!" onClick="error_test();"><!--ボタン押しても関数ないのでエラー-->
</body>
</html>

 - PHP, エラー管理

  関連記事

PHPのclassを用いてBBS作成

オブジェクト指向勉強中のメモ。 ■index.php <? error_r ...

preg_matchについて

PHPでのpreg_matchについて教わることがあったのでメモ。 ■参考サイト ...

Ajaxでデータを受信した際にリファラのチェックをしたい

Ajaxでデータを受信し、MySQLにINSERTするプログラムがあった。そこま ...

PHPで配列データをCSVとしてダウンロードさせる方法

PHPでログ的なデータをCSV化したかった。ただ、複数の人間が使うのでCSVファ ...

PHPのfor文とforeach文

ループ処理の際、forとforeachのどっちでもいけそうな場合、 特にどっちを ...

PHPでゼロパディング

予め桁数を決めておいて、桁数未満の場合は0で埋めたい場合の処理。 str_pad ...

PHPでソーシャル(SNS)ログインする方法2018

久しぶりにソーシャル(SNS)ログインを実装する機会があった。以前に対応方法を書 ...

PHPでメモリの使用率確認

PHPでメモリの使用率を確認。ついでに処理時間も一緒に表示。 /*ヘッダに書いと ...

PHPページングテンプレ

使いやすいのがあったのでメモ。   $page            ...

PHPでyoutubeから更新分の情報を取得する(スクレイピング)

「○○のサイトから自動更新分を持ってきて 自サイトに反映させらへん?」と以前に聞 ...