代码之家  ›  专栏  ›  技术社区  ›  Stoic

包含文件中的文件的PHP输出

  •  4
  • Stoic  · 技术社区  · 14 年前

    我在打电话 __FILE__ 从函数内部。 现在,这个函数本身在一个必需的文件中。

    现在,当我从父文件中调用此函数时,将 输出父文件还是包含的文件?

    哦,我正在寻找一个来源,我可以证实,如果可能的话,因为我在这里的测试给了我完全荒谬的结果。

    另外,如果这应该显示子(包含)文件,我应该如何处理它,以便它更确切地显示父文件路径?(一些变化或什么?)

    4 回复  |  直到 14 年前
        1
  •  3
  •   user229044    14 年前

    __FILE__ 总是替换为符号出现的文件名。

    要获取从中调用函数的文件的名称,可以使用 debug_backtrace() . 这会将当前调用堆栈作为数组返回,每个子数组都包含进行调用的文件、行和函数键。

    您可以将最前面的元素移出数组,以获取调用函数的位置:

    a、 菲律宾比索:

    <?php
    
    require_once('b.php');
    
    b();
    

    <?php
    
    function b() {
       $bt = debug_backtrace();
       var_export($bt); 
    }
    

    输出:

    array (
      0 => array (
        'file'     => '/home/meagar/a.php',
        'line'     => 5,
        'function' => 'b',
        'args'     => array( ),
      ),
    )
    

    a、 菲律宾比索:

    <?php require_once('b.php');
    

    b、 菲律宾比索:

    <?php
    $bt = debug_backtrace();
    var_export($bt);
    

    输出:

    array (
      0 => array (
        'file'     => '/home/meagar/a.php',
        'line'     => 3,
        'function' => 'require_once',
      ),
    )
    
        2
  •  3
  •   codaddict    14 年前

    这个 document 说:

    __文件__
    包括

        3
  •  0
  •   Mihai    8 年前

    下面是我在一个项目中修复这个问题的一个例子。

    我有以下方法 head

    public static function loadPageSpecificStyle()
    {
        $directory_files = scandir(dirname(__FILE__));
    
        foreach($directory_files as $key => $file_name)
        {
            if(strpos($file_name, 'css') !== FALSE)
            {
                echo '<link rel="stylesheet" type="text/css" href="' . $file_name . '" />';
            }
        }
    }
    

    解决办法。 我通过了 __FILE__

    public static function loadPageSpecificStyle($file_as_argument)
    {
        $directory_files = scandir(dirname($file_as_argument));
    
        foreach($directory_files as $key => $file_name)
        {
            if(strpos($file_name, 'css') !== FALSE)
            {
                echo '<link rel="stylesheet" type="text/css" href="' . $file_name . '" />';
            }
        }
    }
    

    在我的页面中,我这样简单地调用: WhateverClass::loadPageSpecificStyle(__FILE__);

    希望这有帮助!

        4
  •  -1
  •   Pekka    14 年前

    debug_backtrace() .