zeilennummer im php-skript fstellen

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/zeilennummer_im_php-skript_fstellen_133465/page_1 - zur Vollversion wechseln!


kleinerChemiker schrieb am 02.01.2005 um 13:37

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


dio schrieb am 02.01.2005 um 13:51

__LINE__


moidaschl schrieb am 02.01.2005 um 13:53

Zitat von kleinerChemiker
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

:confused: er schreibt dir eh hin ".. on line XX"


kleinerChemiker schrieb am 02.01.2005 um 14:01

@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


watchout schrieb am 02.01.2005 um 17:25

im php-log stehen auch die zeilennummern...


kleinerChemiker schrieb am 02.01.2005 um 18:53

nur hat man mw selten zugriff auf die php-logs ;)


watchout schrieb am 02.01.2005 um 20:04

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:

Zitat
The 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]]])
also rtfm :p

http://cz.php.net/manual/en/functio...ror-handler.php


kleinerChemiker schrieb am 02.01.2005 um 20:49

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.


mat schrieb am 03.01.2005 um 23:16

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.


kleinerChemiker schrieb am 03.01.2005 um 23:51

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.


mat schrieb am 04.01.2005 um 10:54

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}";
  }


kleinerChemiker schrieb am 05.01.2005 um 11:22

thx
ist ganz schön viel code :eek:




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025