我有一个PHP路由脚本,像这样:
include_once('routing-functions.php');
// pathMatches was imported from routing-functions.php
if(pathMatches('/blog/*')){
include_once('actual-script.php');
}
我遇到的问题如下:来自routing-functions.php
的函数和全局变量可能会与包含的文件冲突。另外,我不希望actual-script.php
访问路由器的任何变量。
我正在寻找一种方法来完全擦除PHP上下文,以便文件被包含,就像它是直接请求的一样,所以做下面的事情不是一个选择,因为它会改变actual-script.php
执行的上下文/范围:
if(pathMatches('/blog/*')){
$sandbox = function(){
include_once('actual-script.php');
};
$sandbox();
}
此外,向文件发送本地请求(例如使用cURL)也不是一个选项,因为它对性能有负面影响,我希望它像在/blog/
URL下一样运行。
这个问题很容易用.htaccess解决,但是,我需要一个使用PHP路由器的动态解决方案。
如果任何人有类似的问题之前或知道一个很好的解决方案,这将是非常感谢。
1条答案
按热度按时间zkure5ic1#
我不知道你对包含有什么担心。你包含的任何东西都像运行脚本的一部分一样运行。函数不能看到全局变量,除非你用global关键字专门注入一个变量(除了“super globals”)。
如果您的问题是您的路由代码正在更改“超级”全局变量,那么问题就变成了--为什么他们这样做只是为了提供路由?
许多项目都采用Symfony Http Foundation组件来 Package HTTP协议中涉及的所有重要的超级全局变量,这是提供隔离的一种方式。鉴于许多php项目广泛采用此组件,我强烈建议认真研究它。
就像
为了防止函数的名称冲突,只需要使用php命名空间。
给他们打电话: