3

これはかなり前から頭の中にあり、専門家に答えを求めるべきだと思いました。すべてのPHPリクエストを1つのファイルにまとめるのが不十分なプログラミング手法かどうかを知りたいです。私はWebサイトに取り組んでいますが、PHPが関数をどのように処理するかについて100%確信が持てないため、成長に合わせて拡張できるかどうかわかりませんinclude()

準フレームワークをどのように構築したかをよりよく説明するために、ここにルート.htaccessファイルのスニペットがあります。

# > Standard Settings
RewriteEngine On

# Ignore all media requests
RewriteRule ^media/ - [L]

# Funnel all requests into model
RewriteRule ^(.*)$ _model.php [QSA]

したがって、メディアディレクトリ内のコンテンツを除くすべてがこの単一のスクリプトに渡されます。

内部_model.phpでは、すべての入力サニタイズ、ユーザー認証、セッションデータがデータベースから取得され、グローバル変数($ longTime、$ longIPなどの一般的に使用される変数)が設定されています。リクエストは、$_SERVER["REQUEST_URI"]変数の解釈を介してルーティングされます。

基本的に、switch()どのモジュールを選択するかを選択するステートメントがありますinclude()。私が理解していないのは、PHPが実行されるとinclude()、caseディレクティブが真であるかどうかに関係なく、すべてのPHPが実行されるのでしょうか。

時間が経つと、これらのモジュールがたくさんあるのではないかと心配しています。PHPに実行時にすべてのモジュールが含まれていると、処理能力とRAMを大量に消費することになります...

-

編集:
私は本当に、PHPが潜在的に含まなければならない可能性のあるすべてのファイルを「読み取る」かどうかを尋ねています。私はそれが実際にコードを実行するべきではないことを知っています。私の1つがinclude()処理に長い時間がかかる2GBのファイルである場合、PHPは実行する前に常にそのファイルを読み取りますか?

-編集:
別の同様の質問を見つけました(これを投稿する前にたくさん検索しました) 条件付き内のinclude/requireのPHPの動作

私はこれを終わらせることができると思います。

4

2 に答える 2

2

いいえ、PHPはコードフラグメントに到達した瞬間にincludeを実行します。

これは非常に重要です。phpにコードを含むファイルを直接インクルードさせることができるからです。例えば

ファイル1:

<?php echo "Foo"; ?>

File2:

<?php
  echo "Before";
  include("File1");
  echo "After";
?>

PHPプロセッサは、コンパイル時にどのファイルを含めるかさえわからない場合があります。のようなものを想像してみてくださいinclude("File".mt_rand(1,10));。PHPは、includeステートメントに到達する瞬間まで、含めるファイル名を認識しません。

于 2013-02-06T10:52:33.610 に答える
2

条件が満たされていない場合でも、PHPはファイルを含めますか?

いいえ、includeステートメントrequireは他のPHPステートメントと同じ方法で解釈および評価されます。PHPは、実行前にスクリプトをスキャンしてインクルードを探しません。

これは、簡単なテストで確認できます。

if(false)
{
    include('does_not_exist.php');
}

上記はエラーや警告を生成しません。インクルードが実行前に読み取られた場合、次のような警告が表示されます。

警告:include(does_not_exist.php):ストリームを開くことができませんでした:そのようなファイルまたはディレクトリはありません...

警告:include():インクルードのために'does_not_exist.php'を開くことができませんでした...

于 2013-02-06T10:55:01.380 に答える