在我的functions.php中,我有一组函数用在我的网站的页面模板中。我想知道什么是处理错误的最佳方式。此刻,我的functions.php看起来是这样的:PHP:函数脚本中的现代错误处理
// include database
require_once 'system/db.php';
// Functions
// =========
function getUrlsPhotos($db, $resultId) {
$query = "SELECT * FROM pictures WHERE result_id=$resultID ORDER BY id ASC";
$results = $db -> query($query);
// Was there an error?
if ($db -> error) {
$output = 'error_getting_photos';
} else {
// loop for getting photos... ... ...
$output = $array_photos;
}
return $output;
}
function getActivityName($db, $activitiesId) {
$query = "SELECT * FROM activities WHERE id=$activitiesId LIMIT 1";
$results = $db -> query($query);
if ($db -> error) {
$output = 'db_error_getting_activityname';
} else {
$result = $results -> fetch_assoc();
$output = $result;
}
return $output;
}
我的目标就是在某种程度上看,即有错误而不当然用户看到它。什么是处理我所有功能错误的有效方法?我需要初始化什么?
--- 编辑: ---
阅读更多有关错误处理,我想出了下面的脚本,用于存储错误在我的数据库:
<?php
function errorHandler($errno, $errstr, $errfile, $errline) {
static $db;
if (empty($db)) {
$db = new PDO(DSN, DBUSER, DBPASS);
}
$query = "INSERT INTO errorlog (severity, message, filename, lineno, time) VALUES (?, ?, ?, ?, NOW())";
$stmt = $db->prepare($query);
switch ($errno) {
case E_NOTICE:
case E_USER_NOTICE:
case E_DEPRECATED:
case E_USER_DEPRECATED:
case E_STRICT:
$stmt->execute(array("NOTICE", $errstr, $errfile, $errline));
break;
case E_WARNING:
case E_USER_WARNING:
$stmt->execute(array("WARNING", $errstr, $errfile, $errline));
break;
case E_ERROR:
case E_USER_ERROR:
$stmt->execute(array("FATAL", $errstr, $errfile, $errline));
exit("FATAL error $errstr at $errfile:$errline");
default:
exit("Unknown error at $errfile:$errline");
}
}
set_error_handler("errorHandler");
我的问题:
- 什么是最好的地方把这个错误处理函数,以便对我所有的PHP函数有效?把它放在我的functions.php的开头就足够了吗?
- 这个解决方案的缺点当然是,如果数据库关闭,没有办法得到通知。在这种情况下,我怎样才能做到这一点,例如,我收到了通知电子邮件?
谢谢你,我跟随你的链接,并提出了一个脚本。请在最后看到我的帖子的编辑和我的两个问题。也许你有一个想法? – 2014-09-02 08:26:36