PHP開発中に、通常、外部ファイルを導入するために含まれるか要求されます。これらのファイルには、コードを整理および管理するのに効果的に役立つ機能、クラス、または構成ファイルが含まれる場合があります。ただし、時々、トリッキーな問題に遭遇する場合があります。ファイルを導入すると、ファイル内のexit()関数が実行され、プログラム全体が破損します。これが起こらないようにするには、不注意で中断されないようにコードを保護するための効果的な手段が必要です。
exit()関数は、現在のスクリプトの実行を終了するために使用され、パラメーターとしてステータスコードまたは文字列を渡すことができます。デフォルトでは、ステータスコード0を送信し、スクリプトが正常に終了することを示します。ゼロ以外の番号または文字列が渡されると、オペレーティングシステムまたはスクリプトを呼び出す外部プログラムに終了ステータスコードとして返されます。
例えば:
<span><span><span class="hljs-keyword">exit</span></span><span>(); </span><span><span class="hljs-comment">// 正常に終了します,ステータスコードを返します 0</span></span><span>
</span><span><span class="hljs-keyword">exit</span></span><span>(</span><span><span class="hljs-string">'Error occurred'</span></span><span>); </span><span><span class="hljs-comment">// エラーメッセージによる終了</span></span><span>
</span></span>PHPファイルが実行されると、 exit()が呼び出された場合、現在のスクリプトの実行はすぐに中断されます。このファイルがincludeまたは要求を介して他のファイルによって導入された場合、 exit()は含まれるファイルのコンテキストで実行され、メインファイルが中断され、予測不可能なエラーが発生します。
ファイルを導入するときにexit()関数を誤ってトリガーするのを避けるために、次の方法を取得できます。
一般的に、 Exit()への呼び出しは、特定のビジネスロジックによってトリガーされる必要があります。したがって、ファイルを導入する場合、不必要な実行を避けるために、 exit()への呼び出しを適切な条件ステートメントに配置する必要があります。最も一般的な慣行は、判断条件を追加して、特定の環境でのみexit()がトリガーされるようにすることです。
例えば:
<span><span><span class="hljs-comment">// これが構成ファイルであると仮定します,含む exit() 関数</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">defined</span></span><span>(</span><span><span class="hljs-string">'ALLOW_EXIT'</span></span><span>)) {
</span><span><span class="hljs-keyword">exit</span></span><span>(</span><span><span class="hljs-string">'Script has been terminated.'</span></span><span>);
}
</span></span>この場合、定数Alow_Exitが未定義の場合にのみExit()が実行されます。 Fileが導入される前にAlow_exitが定義されている場合、 Exit()はトリガーされません。
exit()関数のロジックを独立した関数にカプセル化し、 exit()が呼び出される場所で特定の条件が満たされているかどうかを判断すると、ファイルを導入するときにExit()を直接実行することを効果的に回避できます。
例えば:
<span><span><span class="hljs-comment">// 在退出时封装一个退出関数</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">safe_exit</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$message</span></span></span><span> = </span><span><span class="hljs-string">''</span></span><span>) {
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">some_condition</span></span><span>()) {
</span><span><span class="hljs-keyword">exit</span></span><span>(</span><span><span class="hljs-variable">$message</span></span><span>);
}
}
</span></span>このようにして、 safe_exit()を直接呼び出して終了する必要がある場所で、 some_condition()関数を介して終了するかどうかを制御できます。
PHPプロジェクトでは、通常、ヘッダーファイル、データベース構成ファイル、ツールファイルなどのパブリックファイルがあります。これらのファイルは、exit()を直接呼び出すのが最適です。 exit()が特定のビジネスロジックでのみ必要な場合、exitロジックは関数またはメソッドを介して制御でき、 exit()関数の使用範囲は特定のビジネス処理モジュールに限定されます。
例えば:
<span><span><span class="hljs-comment">// 通常の状況下で,パブリックファイルでは使用されていません exit()</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">terminate_script</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$message</span></span></span><span>) {
</span><span><span class="hljs-keyword">exit</span></span><span>(</span><span><span class="hljs-variable">$message</span></span><span>);
}
</span></span>PHPのエラー処理メカニズムにより、例外とエラーがキャッチされ、 exit()の実行がメインプログラムの操作に影響を与えることを防ぐことができます。 PHPは、 set_error_handler()やset_exception_handler()などの関数を提供し、エラーや例外の処理をカスタマイズできるようにします。
例えば:
<span><span><span class="hljs-title function_ invoke__">set_error_handler</span></span><span>(function(</span><span><span class="hljs-variable">$errno</span></span><span>, </span><span><span class="hljs-variable">$errstr</span></span><span>) {
</span><span><span class="hljs-comment">// 取り扱いエラー,直接実行を避けてください exit</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"An error occurred: <span class="hljs-subst">$errstr</span></span></span><span>";
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">true</span></span><span>;
});
</span></span>このように、インポートされたファイルでエラーが発生したとしても、 Exit()プログラムはプログラムを中断するために直接呼び出されませんが、カスタマイズされたエラー処理方法を介して処理されます。
PHPは、出力バッファー(出力バッファリング)機能を提供します。これにより、出力コンテンツを一時的に保存し、プログラムが実行された後に出力できます。これにより、ファイルがある程度導入されたときにExit()が中断されないようにすることもできます。
例えば:
<span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();
</span><span><span class="hljs-keyword">include</span></span><span> </span><span><span class="hljs-string">'some_file.php'</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">ob_end_flush</span></span><span>();
</span></span>ob_start()がバッファを起動すると、ファイル内の出力コンテンツが一時的に保存されます。ファイルが導入されたときにexit()が発生した場合でも、出力コンテンツはすぐにブラウザに送信されないため、プログラムの中断を回避します。
サードパーティのライブラリまたはフレームワークを使用する場合、パブリックファイルでexit()を呼び出すかどうかに特に注意する必要があります。一部のフレームワークまたはライブラリは、 exit()を直接呼び出して、アプリケーションに影響を与える可能性のある致命的なエラーに遭遇したときにスクリプトを終了します。
これを避けるために、プログラムの実行を誤って中断しないように導入する際に、サードパーティファイルを確認して適応させることができます。 exit()がフレームワークまたはライブラリ内で頻繁に呼び出されることがある場合は、これらのライブラリのソースコードの変更を検討するか、開発者に連絡して改善を検討できます。
特に大規模なアプリケーションでPHPファイルを導入するときにexit()関数が誤ってトリガーされることを避けることが重要です。Exit ()の不適切な使用は、プログラムの意図しない中断につながる可能性があります。 Exit()を条件付き判断に配置し、関数としてカプセル化し、エラー処理メカニズムを使用し、出力バッファーを使用することにより、この状況が発生しないように効果的に防止し、プログラムの安定性と信頼性を確保できます。