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
}
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
}
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...
`` ```
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.
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.