Когда требуется делать правку кода на рабочем сайте, возникает потребность в обработке возможных ошибок, и делать это незаметно для пользователя. Для начала, потребуется определить собственную функцию обработки 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