URL: https://www.overclockers.at/coding-stuff/zeilennummer_im_php-skript_fstellen_133465/page_1 - zur Vollversion wechseln!
kann ich in einem php-skript die gerade aktuelle zeilennumer festellen? wäre interessant für eine funktion, die bei einem fehler aufgerufen wird, da man dann auch weiß wo der fehler war.
tia
MIK
__LINE__
Zitat von kleinerChemikerkann ich in einem php-skript die gerade aktuelle zeilennumer festellen? wäre interessant für eine funktion, die bei einem fehler aufgerufen wird, da man dann auch weiß wo der fehler war.
tia
MIK
@dio: thx
@moidaschl: nicht, wenn man nicht die automatischen fehlermeldungen will. die seite gibt keinen autput und wird auch nicht von "menschen" besucht. daher will ich eventuell fehlermeldungen in nem file festhalten.
MIK
im php-log stehen auch die zeilennummern...
nur hat man mw selten zugriff auf die php-logs
najo, wenn du aber eine "error-handler" funktion (ich vermute du willst eine solche verwenden) verwendest, nutzt dir __LINE__ recht wenig, weil dann kriegst du erst wieder die zeile in der funktion...
edit: ich seh' grad:
also rtfmZitatThe user function needs to accept two parameters: the error code, and a string describing the error. From PHP 4.0.2, three optional parameters are supplied: the filename in which the error occurred, the line number in which the error occurred, and the context in which the error occurred (an array that points to the active symbol table at the point the error occurred). The function can be shown as: handler ( int errno, string errstr [, string errfile [, int errline [, array errcontext]]])
nein, ist keine richtige error-handler funktion
lediglich ein: mysql_query($query) OR f_mysql_error($query, __LINE__)
die funktion schreibt mir dann zeit und ort des fehlers und den fehler selbst und query-string in ein file.
kannst ja selber einen "error" triggern. allerdings ist das genauso hässlich wie deine variante.
imo schönste version: http://at2.php.net/manual/de/functi...g-backtrace.php
zwar ein wenig anstrengend, aber mit der kannst du aus deiner error funktion heraus, den die aufrufposition herausfinden.
wenn du willst poste ich morgen source code.
naja, ist ja nur für 2 files, aber interessieren würds mich schon. wenn man da was praktisches basteln kann, würd ichs glatt in die hp einbauen. anstatt öffentliche fehlermeldungen, die fehlermeldungen loggen oder in ne db schreiben.
dieser code geht davon aus, dass es eine klasse "Debug" in einem file "debug.cls.php" gibt. mit dieser funktion kann man also den letzten punkt ausserhalb dieser debugklasse ermitteln.
Code: PHP/** * This function returns formatted tracing information. * * @static * * @param int backtrace depth. travel back to other functions. * * @return string formatted trace string */ static function getTraceString($nBackTraceDepth = 0) { $aTrace = debug_backtrace(); if (!is_array($aTrace) || count($aTrace) == 0) return "trace n/a"; // backtrace out of the debug class (and debug file) $found = false; foreach ($aTrace as $aTraceInfo) { if ((isset($aTraceInfo['class']) && $aTraceInfo['class'] == 'Debug') && (isset($aTraceInfo['file']) && strpos($aTraceInfo['file'],'debug.cls.php') !== false)) { $nBackTraceDepth++; continue; } $found = true; break; } if ($found == false) return "trace n/a"; if ($nBackTraceDepth > count($aTrace)) return "invalid depth: $nBackTraceDepth"; $aInfo = $aTrace[$nBackTraceDepth]; // trace one back again to determine the function name we're in $szExtended = ""; if ($nBackTraceDepth+1 < count($aTrace)) { $aClassInfo = $aTrace[$nBackTraceDepth+1]; $szArgs = ""; if (isset($aClassInfo['args']) && is_array($aClassInfo['args']) && count($aClassInfo['args']) > 0) { foreach ($aClassInfo['args'] as $szName => $szValue) { if ($szValue === null) continue; if ($szArgs != "") $szArgs .= ","; // szName should be the varname, but for now that's not supported by php if (is_string($szValue)) $szArgs .= "'$szValue'"; else if (is_object($szValue)) $szArgs .= "object: ".get_class($szValue); else $szArgs .= "'$szValue'"; } if ($szArgs == "") $szArgs = "none"; } else $szArgs = "n/a"; $szExtended = " - ".(isset($aClassInfo['class']) ? "$aClassInfo[class]$aClassInfo[type]" : ""). "$aClassInfo[function] [args: $szArgs]"; } $aInfo['file'] = !isset($aInfo['file']) || $aInfo['file'] == "" ? "unknown" : substr(realpath($aInfo['file']),strlen($_SERVER['DOCUMENT_ROOT'])+1); $aInfo['line'] = !isset($aInfo['line']) ? 0 : $aInfo['line']; return "$aInfo[file], $aInfo[line]{$szExtended}"; }
thx
ist ganz schön viel code
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025