Существует ли способ предотвратить пользователя, просматривающего файл, но все еще использовать его, как включено в другой файл в PHP?
Если вы используете
define('APP_RAN');
в файле, который включает его, а затем помещаете
if(!defined('APP_RAN')){ die(); }
или альтернативно
defined('APP_RAN') or die();
(что проще для чтения)
во включаемые файлы, то при прямом обращении к ним он погибнет.
Хотя, вероятно, лучше было бы поместить все включаемые файлы выше корня DocumentRoot.
Например, если ваша индексная страница находится по адресу
/my/server/domain/public_html
Вы должны поместить включаемые файлы в
/my/server/domain/
Вы должны использовать расширение PHP для кодировщика и загрузчика:
Не использовать глобальные код в ваших файлах, только функции и методы. Тогда не нужно будет заботиться о включении и прямом использовании.
В Apache это просто: добавьте директиву
в .htaccess, чтобы предотвратить доступ к нему из веб-браузера. Это не относится к PHP includes
, и это хорошая практика - скрывать несколько файлов от доступа браузера (хотя обычно вы стараетесь поместить все недоступные файлы в один каталог).
<Files="myprivatefile.php">
deny from all
</Files>
На другом веб-сервере вы можете скрыть файл из корня документа, но в некоторых случаях (например, если ваши скрипты имеют строгий open_basedir
) это не сработает.
Я бы выбрал решение Chacha102 .
Кроме того, поскольку в заголовке вашего вопроса написано « как проверить », вы также можете сделать это без необходимости определять переменную, используя
// secret.php is the name of this file.
if($_SERVER["SCRIPT_FILENAME"]=='secret.php') die();
Если вы хотите, чтобы он никогда не отображался, если он не включен, вот более автоматический способ.
if (basename(__FILE__) == basename($_SERVER['PHP_SELF'])) header("HTTP/1.0 404 Not Found");
Таким образом, он все равно будет работать, если вы в конечном итоге измените имя файла или что-то в этом роде.