处理PHP请求/包含-控制流/拦截

处理PHP请求/包含-控制流/拦截,php,Php,是否可以在PHP中控制所有include/require语句的流;它们是由自动加载程序调用还是在其他地方调用 我正在尝试截取所有包含的内容,并将我的自定义文件放在所有其他文件之前,使用require_一次,这样它就不会被自动加载器或其他人使用 get_included_files/get_required_files只列出包含的文件,但是否有一种变通方法将文件放在该列表的顶部,或者仅仅控制包含的流程,无论是否有自动加载?没有事件,因此没有侦听 除了更改PHP的源代码之外,我能想到的唯一方法是重新

是否可以在PHP中控制所有include/require语句的流;它们是由自动加载程序调用还是在其他地方调用

我正在尝试截取所有包含的内容,并将我的自定义文件放在所有其他文件之前,使用require_一次,这样它就不会被自动加载器或其他人使用


get_included_files/get_required_files只列出包含的文件,但是否有一种变通方法将文件放在该列表的顶部,或者仅仅控制包含的流程,无论是否有自动加载?

没有事件,因此没有侦听

除了更改PHP的源代码之外,我能想到的唯一方法是重新考虑整个事情,将include/require包装到自定义函数中。像这样:

function custom_include($file){
    require_once("my_file.php");
    require_once($file);
}

没有事件,所以没有倾听

除了更改PHP的源代码之外,我能想到的唯一方法是重新考虑整个事情,将include/require包装到自定义函数中。像这样:

function custom_include($file){
    require_once("my_file.php");
    require_once($file);
}
是否可以在PHP中控制所有include/require语句的流;它们是由自动加载程序调用还是在其他地方调用

不,PHP解释器没有提供任何方法来钩住包含文件的机制

控制包含哪些文件的唯一方法是通过,但只有当代码到达对未知类、接口或特征的引用时才会调用。当直接包含/需要文件时,不会调用它

我正在尝试截取所有包含的内容,并将我的自定义文件放在所有其他文件之前,使用require_一次,这样它就不会被自动加载器或其他人使用

正如我在评论中试图解释的那样,当您编写应用程序CLI应用程序或网站时,您可以控制大多数文件包含。您只需在任何其他文件之前包含/要求所需的文件即可。它不会是的输出中的第一个文件,因为它不是加载和执行的第一个文件。包含它的主应用程序文件将始终是列表中的第一个

如果您处理的是一个库,即一组文件,这些文件提供了一些在应用程序中使用的有用功能,那么您无法控制文件包含的顺序。当包含代码时,应用程序和其他库的多个文件很可能已经包含在内

get_included_files/get_required_files只列出包含的文件,但是是否有一种变通方法将文件放在该列表的顶部,或者仅仅控制包含的流程,无论是否有自动加载

get_included_files返回的列表中的第一个文件始终是主脚本;i、 e.由web服务器调用或使用PHP的CLI版本在执行中启动的。它包括其他文件

可以使用php.ini设置配置php解释器的CGI和CLI版本,以便在加载任何主脚本之前加载某个php文件

它仍然不是您想要的,它没有为包含机制提供任何挂钩。它所做的一切就是在运行的每个主脚本上添加所提供的文件,就像从服务器请求的每个PHP脚本都以一个不可见的require语句开始一样

是否可以在PHP中控制所有include/require语句的流;它们是由自动加载程序调用还是在其他地方调用

不,PHP解释器没有提供任何方法来钩住包含文件的机制

控制包含哪些文件的唯一方法是通过,但只有当代码到达对未知类、接口或特征的引用时才会调用。当直接包含/需要文件时,不会调用它

我正在尝试截取所有包含的内容,并将我的自定义文件放在所有其他文件之前,使用require_一次,这样它就不会被自动加载器或其他人使用

正如我在评论中试图解释的那样,当您编写应用程序CLI应用程序或网站时,您可以控制大多数文件包含。您只需在任何其他文件之前包含/要求所需的文件即可。它不会是的输出中的第一个文件,因为它不是加载和执行的第一个文件。包含它的主应用程序文件将始终是列表中的第一个

如果您处理的是一个库,即一组文件,这些文件提供了一些在应用程序中使用的有用功能,那么您无法控制文件包含的顺序。当包含代码时,应用程序和其他库的多个文件很可能已经包含在内

get_included_files/get_required_files只列出包含的文件,但是是否有一种变通方法将文件放在该列表的顶部,或者仅仅控制包含的流程,无论是否有自动加载

get_included_files返回的列表中的第一个文件始终是主脚本;i、 e.由web服务器或 使用PHP的CLI版本在执行中启动。它包括其他文件

可以使用php.ini设置配置php解释器的CGI和CLI版本,以便在加载任何主脚本之前加载某个php文件

它仍然不是您想要的,它没有为包含机制提供任何挂钩。它所做的一切就是在运行的每个主脚本上添加所提供的文件,就像从服务器请求的每个PHP脚本都以一个不可见的require语句开始一样

我正在尝试截取所有包含的内容,并将我的自定义文件放在所有其他文件之前,使用require_一次,这样它就不会被自动加载器或其他人使用

当你提到截取时,你似乎不需要实际截取更多,你想在他们面前推进。请澄清这是否是误解

如axiac所述,将我的自定义文件放在php.ini中可以使用的所有其他文件之前

您可以在特定于帐户的php.ini(通常称为user.ini)或类似文件中执行此操作,该文件在任何php内容文件之前读取:

; Wordfence WAF Example
auto_prepend_file = '/home/accountname/public_html/wordfence-waf.php'
; END Wordfence WAF
上面的意思是,当任何PHP文件加载到此帐户时,将首先调用并运行wordfence-waf.PHP文件。此文件不知道包含的内容将在其之后运行

这是PHP最接近我认为您要实现的目标。如果你澄清问题的措辞,可能会有所帮助

我正在尝试截取所有包含的内容,并将我的自定义文件放在所有其他文件之前,使用require_一次,这样它就不会被自动加载器或其他人使用

当你提到截取时,你似乎不需要实际截取更多,你想在他们面前推进。请澄清这是否是误解

如axiac所述,将我的自定义文件放在php.ini中可以使用的所有其他文件之前

您可以在特定于帐户的php.ini(通常称为user.ini)或类似文件中执行此操作,该文件在任何php内容文件之前读取:

; Wordfence WAF Example
auto_prepend_file = '/home/accountname/public_html/wordfence-waf.php'
; END Wordfence WAF
上面的意思是,当任何PHP文件加载到此帐户时,将首先调用并运行wordfence-waf.PHP文件。此文件不知道包含的内容将在其之后运行


这是PHP最接近我认为您要实现的目标。如果你澄清问题的措辞,可能会有所帮助

在包含自动加载程序之前,请先包含所需的文件。或者写你自己的自动加载器。我知道,这不是我问的。你问的对我来说没有多大意义。如果你在一个项目上工作,你可以决定包含哪些文件以及文件的顺序。如果您在库上工作,则无法控制在您的库之前包含哪些文件。那么,问题是什么?如果你仔细阅读的话,我的问题是:在autoloader之前控制文件的包含,或者其他任何包含文件的方式。不,autoloader不适用于该任务。文档说明:许多编写面向对象应用程序的开发人员为每个类定义创建一个PHP源文件。最大的烦恼之一是必须在每个脚本的开头为每个类编写一个长长的所需包含列表我从来没有提到过OOP/名称空间等。在包含autoloader之前,请先包含所需的文件。或者写你自己的自动加载器。我知道,这不是我问的。你问的对我来说没有多大意义。如果你在一个项目上工作,你可以决定包含哪些文件以及文件的顺序。如果您在库上工作,则无法控制在您的库之前包含哪些文件。那么,问题是什么?如果你仔细阅读的话,我的问题是:在autoloader之前控制文件的包含,或者其他任何包含文件的方式。不,autoloader不适用于该任务。文档说明:许多编写面向对象应用程序的开发人员为每个类定义创建一个PHP源文件。最大的烦恼之一是必须在每个脚本的开头为每个类编写一个长长的所需包含列表我从来没有提到过OOP/名称空间等等。我一般都是问PHP的问题。抱歉,这不是解算器。我一般都是问PHP的问题。抱歉,这不是解算器。我认为auto_prepend_文件最接近OP要查找的内容,我认为auto_prepend_文件最接近OP要查找的内容,