次の質問があります。php スクリプトを 1 回だけ実行するにはどうすればよいですか? これは確かに類似の質問または重複した質問であると人々が返信し始める前に、読み続けてください...
状況は次のとおりです。現在、独自の MVC フレームワークを作成しており、フレームワークに新しい機能を簡単に追加できるモジュール ベースのシステムを考え出しました。そのために/ROOT/modules
、新しいモジュールを追加できるディレクトリを作成しました。
ご想像のとおり、スクリプトはディレクトリを読み取り、すべての php ファイルを読み取り、それらを解析してから、新しい機能を実行できるようにする必要がありますが、すべての Web ブラウザーの要求に対してこれを行う必要があります。これにより、O(nAmountOfRequests * nAmountOfModules) に関するこのタスクが作成されます。これは、毎秒大量のユーザー リクエストがある Web サイトではかなり大きくなります。
次に、次のようなセッション変数を導入するとどうなるかを考え、$_SESSION['modulesLoaded']
それが設定されているかどうかを確認するだけです。これにより、負荷が O(nUniqueAmountOfRequests * nAmountOfModules) に削減されますが、ディレクトリを 1 回読み取るだけの場合、これは依然として大きな大きな 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';
}
そこで質問なのですが、スーパーグローバル変数のように、アクセスでき、すべてのリクエストに対して存在する解決策はありますか?以前の Big O の代わりに、nAmountOfModules のみが存在する Big O を作成できますか? または、モジュールファイルを一度だけ簡単に読み取る別の方法はありますか?
何かのようなもの:
if(isFirstRequest){
foreach (glob('*.php') as $module) {
require_once($module);
}
}