PHP warning/notice сообщения в JS консоль + секретная кнопка

в 15:11, , рубрики: php, Веб-разработка, метки:

Когда требуется делать правку кода на рабочем сайте, возникает потребность в обработке возможных ошибок, и делать это незаметно для пользователя. Для начала, потребуется определить собственную функцию обработки php ошибок.

Кратко изложу один из возможных вариантов конструкций:
Создаем условие, при котором скрипту станет известно, что я/ты его создатель (или пытаемся им быть). Для этого воспользуемся cookie's, например наличие cookie с именем «time6288456272719» = «234567u8». Обычный пользователь/интересующийся не поймет что она значит. Теперь в php проверяем эту cookie, и если она существует, пишем следующую конструкцию:

<?php

/*
 * Проверим, кем представился пользователь и установим обработку ошибок.
 */

if ( isset($_COOKIE['time6288456272719']) && $_COOKIE['time6288456272719'] == "234567u8")
{
    set_error_handler('ereporting'); // ereporting - наша функция для обработки ошибок
    set_exception_handler('ereporting');
}

else
{
    error_reporting(0);
    ini_set('display_errors', 'off');
    ini_set('display_startup_errors', 'off');
}

/*
 * $ereporing array = массив строк с ошибками
 */

$ereporing = array();

function ereporting($errno, $errstr, $errfile, $errline)
{
    $r = ' | '; // '|' - разделитель, кому что больше нравится

    global $ereporting; // можно и так, можно и по ссылке

    $ereporting[] = $errno . $r . $errstr . $r . $errfile . $r . $errline; // запись в массив

    return true;
}

/*
 * Далее, функция чтения и уведомления в консоль разработчика.
 * Также, внизу фигурирует константа 'ROOT', предполагается ее отсутствие или иное написание
 *    DOCUMENT_ROOT'a.
 *
 * Вызов функции можно делать в любом месте страницы, но лучше в конце.
 */

function ereportingRead()
{
    global $ereporting; // также или по ссылке

    ?><script type="text/javascript">try{<?php // лучше поместить js в конструкцию try

    if ( is_array($ereporting) )
    {
        foreach($ereporting as $line)
        {
            ?>console.warn("<?php echo str_replace(ROOT,'',$line);?>");<?php // выводим по одной линии
        }

    }
   
   else
   {
        ?>console.log('ok')<?php // или пишем что все в порядке
   }

    ?>}catch(e){}</script><?php

}

Создание этой самой записи, можно реализовать на js путем клика например, на значке копирайта в футере. Код может быть таким:

/*
 * присвоим спецсимволу © идентификатор, например так: <span id="d73ghd">©</span>
 * вариантов реализации - много
 * можно еще обфусцировать, или написать непонятнослитноточкатиребезпереносов
 * Предполагается наличие jQuery и jQuery cookie (или др.)
 */

$('#d73ghd').click(
 function()
 {
  var c = 'time6288456272719';

  return (!$.cookie(c)) ? $.cookie(c,1,{expires:1,path:'/'}) : $.cookie(c,null);
 }
);

Естественно, можно делать и через авторизацию администратора, но идея существует.

Моя первая запись в блог может быть немного банальна и/или не профессиональна, прокомментируйте.

Спасибо за внимание.

Автор: 4ikist

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js