33 Stimmen

Herausfinden des Dateinamens, der meine Funktion in PHP aufgerufen hat

Wie finde ich den Dateinamen des Skripts heraus, das meine Funktion aufgerufen hat?

Zum Beispiel,

function sthing() {
echo __FILE__; // gibt mich selbst aus
echo __CALLER_FILE__; // gibt die Datei aus, die mich aufgerufen hat
}

40voto

Pascal MARTIN Punkte 384469

Eine Lösung könnte sein, die debug_backtrace Funktion zu verwenden: Im Rückverfolgungsprotokoll sollte diese Art von Informationen vorhanden sein.

Oder, wie Gordon in einem Kommentar erwähnt hat, können Sie auch debug_print_backtrace verwenden, wenn Sie diese Informationen nur ausgeben möchten und nicht damit arbeiten wollen.

Zum Beispiel, mit temp.php dies enthalten :



und mit `temp-2.php` dies enthalten :

``

Das Aufrufen von `temp.php` `(also dem ersten Skript)` in meinem Browser zeigt mir diese Ausgabe:

    array
      0 => 
        array
          'file' => string '/.../temp/temp.php' (length=46)
          'line' => int 5
          'function' => string 'my_function' (length=11)
          'args' => 
            array
              empty

Darin habe ich den Dateinamen "`temp.php`" - welcher derjenige ist, in dem die Funktion aufgerufen wurde.

Natürlich müssen Sie etwas mehr testen _(besonders in Situationen, in denen die Funktion nicht in der "ersten Ebene" der eingefügten Datei, sondern in einer von einer anderen Datei eingefügten Datei enthalten ist - nicht sicher, ob `debug_backtrace` dort viel helfen wird...)_ ; aber das könnte Ihnen einen ersten Eindruck vermitteln...

`` ```

14voto

Mirko Pagliai Punkte 1171

Versuchen Sie diesen Code:

$key = array_search(__FUNCTION__, array_column(debug_backtrace(), 'function'));
var_dump(debug_backtrace()[$key]['file']);

3voto

Gordon Punkte 304254

Zusätzlich zum Vorschlag von Pascal Martins könnten Sie die PECL-Erweiterung APD installieren und etwas wie apd_callstack() verwenden, das (Beispiel zitierend)

// gibt ein Array zurück, das ein Array von Arrays enthält.

Jedes Array enthält anscheinend:
[0] = Funktionsname
[1] = Dateiname, der die Funktion enthält
[2] = *aufrufende* Zeilennummer in *aufrufender* Datei
[3] = Ein Array, das normalerweise leer ist

Aber da es sich um eine PECL-Erweiterung handelt und mit dem Zend Optimizer interferieren könnte, wäre es vielleicht besser, debug_backtrace() zu verwenden.

1voto

Jay Lepore Punkte 59

2 Zeilen - erledigt:

$backfiles=debug_backtrace();
echo $file_called_from=$backfiles[0]['file']; // vollständiger Dateipfad

Oder um nur den Dateinamen auszuschneiden, fügen Sie folgendes hinzu

echo "";
echo basename($file_called_from); // nur der Dateiname ohne Pfad

1voto

Dies druckt dateiname:zeile aus

function myFunction() {
  $backfiles = debug_backtrace();
  echo $backfiles[0]['file'] . ':' . $backfiles[0]['line'];
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X