function.phpなど、ブラウザから直接アクセスされる用事のないファイルについて、直接アクセスされたときは処理を終了したい場合、__FILE__と$_SERVER[“SCRIPT_NAME”]を使う方法があります。
○__FILE__と$_SERVER[“SCRIPT_NAME”]
__FILE__ — 処理が記述されたファイル名
$_SERVER[“SCRIPT_NAME”] — 実行されたファイル名
function.phpがインクルードされると、実行されたファイル名は「test.php」など、インクルードしたファイル名になるので、この2つは異なる値になります。
function.phpに直接アクセスした場合、この2つの「ファイル名」は同じになります(パス情報が含まれるので一致はしません)。
これを利用して、直接アクセスされた場合に処理を終了する場合は、$_SERVER[“SCRIPT_NAME”]と__FILE__のファイル名の部分が一致する場合は処理を終了するというコードをfunction.phpなどの先頭で実行する方法があります。
<?php if (basename($_SERVER["SCRIPT_NAME"]) == basename(__FILE__)) { echo "直接アクセスなので処理終了"; exit; } …略… ?>
○実行結果(このファイルに直接アクセスした場合)
直接アクセスなので処理終了
PHPスクリプトへの直接アクセスではなく、テキストファイルなどのデータファイルへの直接アクセスを防ぐ方法は、次の記事を参考にしてください。
【関連記事】データが丸見えになっていませんか?