【问题标题】:Run PHP function from parent file从父文件运行 PHP 函数
【发布时间】:2015-10-28 16:01:08
【问题描述】:

我需要一些帮助来解决我面临的问题。 我在网上查看过,但我只发现了更多无法解决我的常见问题。

主要思想是从父文件中运行get_included_files()get_defined_vars()debug_backtrace()等PHP函数。

在我的代码中,我有一个 PHP 文件,我们称之为 A.php,其中包含另一个 PHP 文件,比如说 B.php。 例如,我想在 B.php 中运行 get_included_files() 以获取 A.php 中包含的文件。

类似于 parent:: 的东西,但用于 PHP 文件而不是面向对象编程。 我知道这可能是一个安全漏洞,这就是为什么我不确定它是否可能,但我要求确定。

为了最清楚,这里是一个例子:

A.php

include 'B.php';
include 'C.php';
include 'D.php';

get_includes();

B.php

function get_includes()
{
    $included_files = get_included_files();
    print_r($included_files);
}

我需要$included_files var 来包含array('B','C','D')。 我的问题是 PHP 函数从它启动的文件中获取包含的文件,而不是从父级(使用此代码,$included_files 为空)。

【问题讨论】:

  • 删除了不必要的词

标签: php function php-include


【解决方案1】:

php 是解释器,解释将是字符串。所以文件 a.php 尝试按以下顺序包含文件:

include 'С.php';
include 'D.php';
include 'B.php';

【讨论】:

    【解决方案2】:

    考虑这个例子:

    一个.php

    function a(){
        echo "a";
    }
    
    function b(){
        echo "b";
    }
    

    b.php

    include "a.php";
    
    echo a();//echoes a
    
    echo b();//echoes b
    

    【讨论】:

    • 我的印象是 OP 想要从文件 a 运行诸如 get_included_files 之类的函数,以便它返回文件 B 的值。@Jean-Loup-Becquet 是这种情况?
    • 是的,就是这样,我想运行 PHP 函数(未在我的文件中定义)来获取父文件值。
    • 你想运行一些没有定义的东西??
    • 已定义,它们是像 php.net/manual/en/function.get-included-files.php 这样的 PHP 函数,但它们没有在我的文件中定义。
    【解决方案3】:

    不知道能不能解决你的问题,不过你也可以在父文件中执行这些函数,将结果赋值给一个变量,然后在包含的文件中读取这个变量。

    例如:

    A.php

    $a = 1;
    
    $files = get_included_files();
    $vars = get_defined_vars();
    
    include 'B.php';
    
    $b = 2;
    
    $files = get_included_files();
    $vars = get_defined_vars();
    
    include 'C.php';
    

    B.php

    echo 'B<br /><pre>';
    print_r($files);
    print_r($vars);
    echo '</pre>';
    

    C.php

    echo '<br />C<br /><pre>';
    print_r($files);
    print_r($vars);
    echo '</pre>';
    

    它会给出如下所示的输出:

    B
    
    Array
    (
        [0] => A.php
    )
    Array
    (
        [...]
        [a] => 1
        [files] => Array
            (
                [0] => A.php
            )
    )
    
    
    C
    
    Array
    (
        [0] => A.php
        [1] => B.php
    )
    Array
    (
        [a] => 1
        [files] => Array
            (
                [0] => A.php
                [1] => B.php
            )
        [vars] => Array
            [...]
        [b] => 2
    )
    

    请注意,在调用函数之后,您无法获取有关包含/定义的文件和变量的信息,因此无论如何从 B.php 中您无法知道稍后将包含 C.php 和 D.php .

    【讨论】:

    • 如果我没有找到任何解决方案,这就是我想要做的,是的,你是对的,我的实际代码没有给出包含文件的完整列表。其实我真正的代码是使用一个函数,我会编辑我的帖子来纠正这个例子。
    • 那很奇怪,因为当我运行更新后的示例时,它会打印 A.php、B.php、C.php 和 D.php。你用的是什么 PHP 版本?
    猜你喜欢
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    相关资源
    最近更新 更多