Intereting Posts
Какой метод предпочтительнее для проверки строки после импорта csv Лучшая практика создания динамической боковой панели с помощью zend framework Принятие «скриншота» java-апплета mysql_fetch_array не извлекает все строки php / as3 regex для разделения нескольких json в одном Запись в определенную строку в PHP Присвоение результата функции переменной в классе PHP? Опухоль Загрузка нескольких файлов с помощью AJAX и PHP Самая быстрая реализация для выполнения нескольких подстановок строк в Python Окончательное решение для использования regex для удаления вложенных тэгов html того же типа? Создание матрицы совпадения из базы данных mysql в MYSQL, PHP или R PHP ICONV glibc для libiconv на CentOS 5.5 Node.js автоматически сбой mysql без какой-либо операции в нем Почему это регулярное выражение выбрасывает ошибку PREG_BACKTRACK_LIMIT_ERROR? отправлять данные при нажатии кнопки из javascript в базу данных

PHP- «Определено или вышло» в начале многих файлов?

Я изучал некоторые исходные коды PHP, и я чаще всего находил файлы, начиная с

defined('__someconstant__') or exit(); 

Я знаю, что это предотвращает доступ к файлу напрямую, если предыдущий файл определяет __someconstant__ , но потом я задаюсь вопросом, действительно ли это необходимо … Не существует (даже не основанного на PHP) более чистого способа сделать это, не вводя этого дополнительный код в каждом файле?

Разве нет (даже не на PHP) более чистого способа сделать это, не вводя этот дополнительный код в каждый файл?

Наличие таких фрагментов указывает на плохое структурирование кода, а именно на код, автоматически выполняемый в глобальной области. У вас не должно быть этого or exit(); код в чистой функции / классе. Там было бы лишнее.

Код, который выполняет потенциально опасные действия, не должен быть доступен в Интернете. Выход or exit; подход является обходным путем. Однако он всегда должен сопровождаться FilesMatch и Deny from All в файле .htaccess . Лучше всего установить весь каталог include недоступным.

Чтобы избежать этих (бесполезных) строк в верхней части (почти) каждого файла, можно:

  • Храните открытый файл «контроллера» (например, index.php в каталоге, называемом веб- или общедоступным, на котором псевдоним вашего веб-сервера или виртуальный хост указывает на

  • Храните в других каталогах, таких как lib , config , apps … все файлы, к которым нельзя напрямую обращаться через веб-сервер, просто набрав URL-адрес.

Обычно это структура существующих инфраструктур, таких как Symfony 1.x

Кроме того, вы можете (и, конечно же, будете переписывать URL-адреса) помещать файл .htaccess , но неверная конфигурация сервера может случайно отключить его, поэтому сохранение исходных файлов в разных каталогах – это ИМО лучше.

Добавляем к ответу @ NullUserException …

Да, есть другие способы предотвращения прямого доступа к файлу (например, htaccess), но для программного обеспечения, которое доступно широкой аудитории, вы не можете действительно полагаться на те технологии, которые там есть. Однако вы можете положиться на простое условие в верхней части файлов.