我有以下问题:如何只运行一次 php 脚本?在人们开始回复这确实是一个相似或重复的问题之前,请继续阅读......
情况如下,我目前正在编写自己的 MVC 框架,并且我提出了一个基于模块的系统,因此我可以轻松地向我的框架添加新功能。为此,我创建了一个/ROOT/modules
目录,可以在其中添加新模块。
所以你可以想象,脚本需要读取目录,读取所有 php 文件,解析它们,然后才能执行新功能,但是它必须为所有 webbrowsers 请求执行此操作。这将使这个任务大约为 O(nAmountOfRequests * nAmountOfModules),这在每秒有大量用户请求的网站上相当大。
然后我想,如果我引入一个像这样的会话变量会怎样:$_SESSION['modulesLoaded']
然后简单地检查它是否设置。这会将负载减少到 O(nUniqueAmountOfRequests * nAmountOfModules) 但如果我唯一想做的就是读取目录一次,这仍然是一个很大的大 O。
我现在拥有的是以下内容:
/** Load the modules */
require_once(ROOT . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR . 'module_bootloader.php');
存在以下代码:
<?php
//TODO: Make sure that the foreach only executes once for all the requests instead of every request.
if (!array_key_exists('modulesLoaded', $_SESSION)) {
foreach (glob('*.php') as $module) {
require_once($module);
}
$_SESSION['modulesLoaded'] = '1';
}
所以现在的问题是,是否有一个解决方案,比如一个超全局变量,我可以访问并存在于所有请求中,所以我可以制作一个只存在于 nAmountOfModules 的 Big O,而不是之前的 Big O?还是有另一种方法可以轻松读取模块文件一次?
就像是:
if(isFirstRequest){
foreach (glob('*.php') as $module) {
require_once($module);
}
}