Finding out the filename that called my function in PHP

匿名 (未验证) 提交于 2019-12-03 02:16:02

问题:

How do I find out the filename of the script that called my function?

For example,

function sthing() { echo __FILE__; // echoes myself echo __CALLER_FILE__; // echoes the file that called me } 

回答1:

A solution might be to use the debug_backtrace function : in the backtrace, that kind of information should be present.

Or, as Gordon pointed out in a comment, you can also use debug_print_backtrace if you just want to output that information and not work with it.


For instance, with temp.php containing this :

<?php include 'temp-2.php'; my_function(); 

and with temp-2.php containing this :

<?php function my_function() {     var_dump(debug_backtrace()); } 


Calling temp.php (i.e. the first script) from my browser gets me this output :

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

In there, I have the "temp.php" filename -- which is the one in which the function has been called.


Of course, you'll have to test a bit more (especially in situations where the function is not in the "first level" included file, but in a file included by another one -- not sure debug_backtrace will help much, there...) ; but this might help you get a first idea...



回答2:

In addition to Pascal Martins's suggestion, you could install the PECL extension APD and use something like apd_callstack(), which (quoting example)

// returns an array containing an array of arrays.  Each array appears to contain: [0] = function name [1] = filename that contains function [2] = *calling* line number in *calling* file [3] = An array which is usually empty 

But since this is a PECL extension and might interfere with Zend Optimizer, you might be better off going with debug_backtrace().



回答3:

Try this:

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


回答4:

You can pass the filename as a parameter:

function sthing($filename) {   echo __FILE__; // echoes myself   echo $filename; // echoes the file that called me } 

When you call the function you pass the magic constant FILE:

sthing(__FILE__); 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!