Es gibt mehrere Möglichkeiten:
a. Du überprüfst, ob $_SERVER['SCRIPT_FILENAME'] == __file__ ist. Achtung: Es gibt Serverkonfigurationen, bei denen das nicht klappt, weil die Inhalte der Variable und der Konstante immer unterschiedlich sind.
b. Du schützt das Verzeichnis, in dem sich die Includefiles befinden, vor dem HTTP Zugriff. Falls Du den Schutz via .htaccess (Forensuche bemühen) machst: ob das erlaubt ist und funktioniert, ist ebenfalls abhängig von der Konfiguration.
c. Du setzt in allen Scripten, die aufgerufen werden dürfen und Files per Include einfügen, eine Variable oder Konstante, die in den eingefügten Files getestet wird. Das klappt immer.
index.php
PHP-Code:
<?php
define('OK', true);
# dies
include('./mein_include.php');
# das
# und noch was
?>
mein_include.php
PHP-Code:
<?php
if (! defined('OK'))
die('Du kommst hier net rein!');
# weiter
?>