PEAR и запись ошибок в лог.

valerchik

Guest
PEAR и запись ошибок в лог.

вобщем как ошибку PEAR, зафигачить в лог-файл, и при этом юзеру выдать просто ошибка, извени, ну как при PEAR::setErrorHandling(PEAR_ERROR_PRINT);

-~{}~ 22.06.05 16:45:

что, никто в лог ошибки не пишет ?
 

kvn

programmer
PHP:
PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, "my_callback_function");

function my_callback_function(&$obj) {
  // запись в лог
  echo $obj->getMessage();
  echo $obj->getDebugInfo();
  // вывод на экран..
  echo "Shit happens!";
  // something else...
}
 

Bambuk

Новичок
Вообще, есть специальный пакет PEAR::Log, который для этого и предназначен (запись в файл, БД и т.п.)
 

valerchik

Guest
Автор оригинала: kvn
PHP:
PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, "my_callback_function");

function my_callback_function(&$obj) {
  // запись в лог
  echo $obj->getMessage();
  echo $obj->getDebugInfo();
  // вывод на экран..
  echo "Shit happens!";
  // something else...
}
а файл, в котором ошибка, как узнать ?
 

kvn

programmer
а файл, в котором ошибка, как узнать ?
В общем случае никак, а смысл?
Обчно достаточно записать в лог: $_SERVER["REQUEST_URI"] + $_SERVER["QUERY_STRING"] и т.п.
в противном случае использовать custom error raising:
PEAR::raiseError("Shit happens in __FILE__");
 

peroksid

Guest
Да вроде можно узнать файл.
PHP:
require_once("PEAR.php");
define("PEAR_IS_SAINT", true);
define("DEBUG", true);
function pear_error_handler($error_obj)
{
    if (DEBUG) {
        print "<pre>";
        foreach (array_reverse($error_obj->backtrace) as $e){
        	if (!isset($e['file'])) {
        		continue;
        	}
        	if (PEAR_IS_SAINT && preg_match("/\/pear\//", $e['file'])) {
        		continue;
        	}
        	if (!empty($e['file'])){
	        	print ("{$e['file']}:{$e['line']}\n");
        	}
        }
        die($error_obj->getMessage() . "\n" . $error_obj->getDebugInfo());
    } else {
        print "Все пропало.";
    }
}
Такая ерунда возвращает в обратном порядке пути к файлам, в которых случилось это самое. То есть если файл index.php включает файл oi.php, а тот включает Net/FTP.php и ошибка случилась, к примеру, во время фтп-коннекта, то получим index.php:номер_строки, потом этот самый Oi. У меня PEAR лежит в поддиректории pear, поэтому Net/FTP.php в списке я не увижу (я исхожу из того, что ошибок в пеар не бывает). Удобно.
/home/hkey/public_html/sys/loginshield_installer/index.php:67
/home/hkey/public_html/sys/loginshield_installer/stage_21.php:12
/home/hkey/public_html/sys/loginshield_installer/inc/Installation.class.php:152
Connection to host failed
 
Сверху