IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   получение номера строки в PHP (https://www.imho.ws/showthread.php?t=20597)

infernal 15.01.2003 04:44

получение номера строки в PHP
 
как получить номер строки на которой выполняеться код?
нужно например для error loger'a ...

RaZEr 15.01.2003 22:21

Так PHP сам выдает номер строки в которой произошла ошибка . Если хочешь попрятать ошибки от пользователей - отключи вывод ошибок в php.ini, а в логах сервера они будут . Оттуда и бери .

infernal 16.01.2003 02:14

неохота мне в логах копаться... нужно что то типо того...
пример
PHP код:

function error_log(){
//пишем об ошибке в файл или шлем на мыло\аську
//релирект
}
my_conn() or error_log(); 


RaZEr 16.01.2003 02:44

Пример (в свое время был целый раздел на php.net, сейчас куда-то дели):
PHP код:

<?php
// we will do our own error handling
error_reporting(0);

// user defined error handling function
function userErrorHandler ($errno$errmsg$filename$linenum$vars) {
   
// timestamp for the error entry
   
$dt date("Y-m-d H:i:s (T)");

   
// define an assoc array of error string
   // in reality the only entries we should
   // consider are 2,8,256,512 and 1024
   
$errortype = array (
               
1   =>  "Error",
               
2   =>  "Warning",
               
4   =>  "Parsing Error",
               
8   =>  "Notice",
               
16  =>  "Core Error",
               
32  =>  "Core Warning",
               
64  =>  "Compile Error",
               
128 =>  "Compile Warning",
               
256 =>  "User Error",
               
512 =>  "User Warning",
               
1024=>  "User Notice"
               
);
   
// set of errors for which a var trace will be saved
   
$user_errors = array(E_USER_ERRORE_USER_WARNINGE_USER_NOTICE);
   
   
$err "<errorentry>\n";
   
$err .= "\t<datetime>".$dt."</datetime>\n";
   
$err .= "\t<errornum>".$errno."</errornum>\n";
   
$err .= "\t<errortype>".$errortype[$errno]."</errortype>\n";
   
$err .= "\t<errormsg>".$errmsg."</errormsg>\n";
   
$err .= "\t<scriptname>".$filename."</scriptname>\n";
   
$err .= "\t<scriptlinenum>".$linenum."</scriptlinenum>\n";

   if (
in_array($errno$user_errors))
       
$err .= "\t<vartrace>".wddx_serialize_value($vars,"Variables")."</vartrace>\n";
   
$err .= "</errorentry>\n\n";
   
   
// for testing
   // echo $err;

   // save to the error log, and e-mail me if there is a critical user error
   
error_log($err3"/usr/local/php4/error.log");
   if (
$errno == E_USER_ERROR)
       
mail("phpdev@example.com","Critical User Error",$err);
}


function 
distance ($vect1$vect2) {
   if (!
is_array($vect1) || !is_array($vect2)) {
       
trigger_error("Incorrect parameters, arrays expected"E_USER_ERROR);
       return 
NULL;
   }

   if (
count($vect1) != count($vect2)) {
       
trigger_error("Vectors need to be of the same size"E_USER_ERROR);
       return 
NULL;
   }

   for (
$i=0$i<count($vect1); $i++) {
       
$c1 $vect1[$i]; $c2 $vect2[$i];
       
$d 0.0;
       if (!
is_numeric($c1)) {
           
trigger_error("Coordinate $i in vector 1 is not a number, using zero"
                           
E_USER_WARNING);
           
$c1 0.0;
       }
       if (!
is_numeric($c2)) {
           
trigger_error("Coordinate $i in vector 2 is not a number, using zero"
                           
E_USER_WARNING);
           
$c2 0.0;
       }
       
$d += $c2*$c2 $c1*$c1;
   }
   return 
sqrt($d);
}

$old_error_handler set_error_handler("userErrorHandler");

// undefined constant, generates a warning
$t I_AM_NOT_DEFINED;

// define some "vectors"
$a = array(2,3,"foo");
$b = array(5.54.3, -1.6);
$c = array (1,-3);

// generate a user error
$t1 distance($c,$b)."\n";

// generate another user error
$t2 distance($b,"i am not an array")."\n";

// generate a warning
$t3 distance($a,$b)."\n";

?>


infernal 16.01.2003 02:50

пасиб!


Часовой пояс GMT +4, время: 02:32.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.