PHPで実際に必要なこと
PHPは初めてで、requireを使用すると問題が発生します。
- 「Config.php」は親フォルダーにあります
- モデルには、「LaptopModel.php」が含まれるテストが含まれています。
- コントローラーにはファイル「LaptopController.php」が含まれています
Config.php内:
<?php
$host = "localhost";
$username = "admin";
LaptopModel.phpの場合:
<?php
require '../../Config.php';
LaptopController.php内:
<?php
require '../Model/test/LaptopModel.php';
問題は、サーバーがこのファイルを処理するときに、LaptopController.phpに実際にコードが何であるかということです。 エラーにつながるかどうかという2つの方法で考えます。
<?php
require '../../Config.php';//必要なファイルから元のコードを取得する
//これはLaptopController.phpからのエラーを引き起こします
//Config.phpへのリンクは「../Config.php」である必要があります
または次のようになります:
<?php
$host = "localhost";
$username = "admin";
//元のコードではなく、Laptopmodel.phpファイルから必要なものを取得します
答え :
解決策:
質問の一部に関係なく、Requireが実際に行うことは簡単です... ファイルが見つからないか見つからない場合、致命的なエラーが発生し、スクリプトの実行が停止します
答え :
解決策:
問題は、サーバーがこのファイルを処理するときにLaptopController.phpに実際に含まれるコードは何かということです。
ファイル
LaptopController.php
には、あなたが書いたものが正確に含まれています。 PHPインタープリターは、ディスク上でもメモリにロードするときでも、ファイルの内容を変更しません。
require
はコピー/貼り付けのようには機能しません。関数呼び出しのように機能します(ただし、関数のようにローカルスコープは導入されません)。
LaptopController.php
のコードがコンパイルされると、ステートメントrequire'../Model/test/LaptopModel.php';
は、「このファイルのコードをロードして実行する」というオペコードに変換されます。
LaptopModel.php
のコードは、コンパイルフェーズでは読み取られてコンパイルされません。 ifファイルのパス(../ Model / test / LaptopModel.php
)が存在するかどうかもチェックしません。これらはすべて実行時に発生し、 if実行ポイントはrequire
ステートメントに到達します。これは簡単に検証できます。
require
ステートメントをif
ステートメントに配置して作成します。 require dファイルに構文エラーがある(または存在しない)ことを確認してください。require
を含むif
ブランチが実行されると、致命的なエラーがトリガーされ、スクリプトが終了します。それ以外の場合は、require
ステートメントが実行されないため、正常に実行されます。//ファイル'a.php'は存在しません {-コード-9}(false){ //このステートメントは実行されず、エラーはトリガーされません require'a.php'; }
答え :
解決策:
通常、すべては最初にロードされたPHPファイル(作業ディレクトリ)のパスに関連しています。コマンドgetcwd()
を実行して、どこからファイルをロードしようとしているのかを確認します。この場合、 index.php
があるディレクトリに基づいて含まれているように見えます。
getcwd —現在の作業ディレクトリを取得します
インクルードに関する情報(参照している現在のディレクトリは現在の作業ディレクトリです):
パスが定義されている場合—絶対パス(Windowsではドライブ文字または\で始まる、Unix / Linuxシステムでは/で始まる)または現在のディレクトリからの相対パス(。または..で始まる)—include_pathは無視されます完全に。たとえば、ファイル名が../で始まる場合、パーサーは親ディレクトリを調べて、要求されたファイルを見つけます。
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。