繁体   English   中英

包含文件的__FILE__的PHP输出

[英]PHP output of __FILE__ inside included file

好的,这是一个真正的简短查询。 我从函数内部调用__FILE__ 现在,此函数本身位于必需文件中。

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

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

此外,如果这应该显示子(包含)文件,我应该怎么做才能显示父文件路径? (某些变化或什么?)

文件说:

__文件__
文件的完整路径和文件名。 如果在include中使用,则返回包含文件的名称。

__FILE__始终替换为符号出现的文件名。

要获取调用函数的文件的名称,可以使用debug_backtrace() 这将当前callstack作为数组返回,每个子数组包含进行调用的文件,行和功能键。

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

a.php只会:

<?php

require_once('b.php');

b();

b.php:

<?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只会:

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

b.php:

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

输出:

array (
  0 => array (
    'file'     => '/home/meagar/a.php',
    'line'     => 3,
    'function' => 'require_once',
  ),
)

这是我在一个项目中修复此问题的示例。

问题。 我有以下方法,我在我的html模板的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 . '" />';
        }
    }
}

在我的页面的head ,我然后简单地调用如下: WhateverClass::loadPageSpecificStyle(__FILE__);

希望这可以帮助!

据我所知,你正在寻找什么 - 获得“父”的路径包括本身又是一个包含 - 是不可能的,甚至不使用debug_backtrace()

您必须创建自己的include函数,以跟踪包含文件的“堆栈”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM