Её задача уменьшить колличество кода и упростить вывод ошибок. Функция переписывалась уже раз пять и сейчас я спокойно могу утверждать, что она идеальна. Могу отметить то, что поддерживаются абсолютно все форматы URL(полный, относительный, абсолютный) как на локальной машине, так и на удаленном сервере, если не указать URL, то ошибка выведется на текущей странице.
Интеграция
В func.php вставляем следующий код:
$absolutpath = $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING']; // Абсолютный путь к странице
/****************************Массив ошибок****************************/
$errfile = file($home . "/error.dat");
$error = array();
for($i = 0; $i < count($errfile); $i++)
{
list($key, $value) = explode(":", $errfile[$i]);
$error[trim($key)] = trim($value);
}
/*********************************************************************/
/**********************Функция обработки ошибок***********************/
/*--------------------
$n -- номер ошибки
$url -- страница, на которую следует переадресовать при ошибке(начиная с корня "/")
--------------------*/
function error($n, $url = ''){
global $home;
global $absolutpath;
if($url == '')
$url = $absolutpath;
$len = strlen($url) - 1;
if(substr_count($url, '?') > 0)
$end = '&error=' . $n;
else if($url{$len} == '?')
$end = 'error=' . $n;
else
$end = '?error=' . $n;
$out = $home . $url . $end;
if(substr($url, 0, 1) != '/')
$out = $url . $end;
header("Location: " . $out . "");
die();
}
/*********************************************************************/
В head.php вставляем данный код в любом удобном для вас месте:
// Вывод ошибок
if(isset($_GET['error']))
{
$err = trim(urlencode($_GET['error']));
echo '<div class="err">';
if(isset($error[$err]))
echo 'Ошибка №' . $err . '<br/>' . $error[$err];
else
echo $error[1];
echo '</div>';
}
Создаем в корне сайта файл error.dat, где прописываем номера и тексты ошибок таким образом:
1 : Ошибка номер 1
2 : Ошибка номер 2
3 : Ошибка номер 3
Все готово. Теперь, чтобы воспользоватся функцией пишем такой код:
// Это только чтобы показать как пользоватся функцией, этот пример у вас может не сработать
if(1 != 1)
error('1', '../index.php');
Чтобы стилизовать вывод ошибок используйте класс .err
В дальнейшем функция будет переписана таким образом, что номера ошибок и страницы, на которых они были обнаружены будут записыватся в базу и выводится в специальном разделе админки. Пример показан на скриншоте(у меня две идентичные функции: одна для вывода ошибок, вторая для вывода оповещений)