Просмотр поста #25285: Функция вывода ошибок

.
Z3RO

Вобщем решил я выложить свою суперпупер секретную функцию
Её задача уменьшить колличество кода и упростить вывод ошибок. Функция переписывалась уже раз пять и сейчас я спокойно могу утверждать, что она идеальна. Могу отметить то, что поддерживаются абсолютно все форматы 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

В дальнейшем функция будет переписана таким образом, что номера ошибок и страницы, на которых они были обнаружены будут записыватся в базу и выводится в специальном разделе админки. Пример показан на скриншоте(у меня две идентичные функции: одна для вывода ошибок, вторая для вывода оповещений)
Прикрепленные файлы: