搜索

首页  >  问答  >  正文

php里如何在函数中获取调用此函数的当前文件名

在php获取当前文件名很简单,使用__FILE__常量就是了。但是如果我定义了一个通用函数,而这个每次被调用的时候就要获取当前调用它的是哪个文件,应该怎么办呢?

1

2

3

4

5

6

<code><?php

// 这是lib.php

function get_current_file() {

    // ... do something

}

</code>

1

2

3

4

<code><?php

// 这是action.php

echo get_current_file();

</code>

也就是如上的效果,我调用get_current_file时要获得当前的调用文件比如action.php

这只是个例子,真正使用的时候我不会单纯的去获取文件名,而是要配合一些逻辑,不过这是最重要的一步。

PHP中文网PHP中文网2909 天前274

全部回复(1)我来回复

  • 大家讲道理

    大家讲道理2017-04-10 15:02:22

    可以试下http://cn2.php.net/manual/zh/function.debug-backtrace.php
    里面有个和你要的效果类似的例子,给你摘下如下

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    <code class="lang-php"><?php

    function get_caller_info() {

        $c = '';

        $file = '';

        $func = '';

        $class = '';

        $trace = debug_backtrace();

        if (isset($trace[2])) {

            $file = $trace[1]['file'];

            $func = $trace[2]['function'];

            if ((substr($func, 0, 7) == 'include') || (substr($func, 0, 7) == 'require')) {

                $func = '';

            }

        } else if (isset($trace[1])) {

            $file = $trace[1]['file'];

            $func = '';

        }

        if (isset($trace[3]['class'])) {

            $class = $trace[3]['class'];

            $func = $trace[3]['function'];

            $file = $trace[2]['file'];

        } else if (isset($trace[2]['class'])) {

            $class = $trace[2]['class'];

            $func = $trace[2]['function'];

            $file = $trace[1]['file'];

        }

        if ($file != '') $file = basename($file);

        $c = $file . ": ";

        $c .= ($class != '') ? ":" . $class . "->" : "";

        $c .= ($func != '') ? $func . "(): " : "";

        return($c);

    }

    </code>

    回复
    0
  • 取消回复