PHP: код, работающий только из include`а
Итак, пока не перешел к содержанию заметки:
Замечание. Уважаемый читатели блог поменял RSS ленту. Теперь rss доступно по адресу http://feeds2.feedburner.com/kachayev.
Со старого фида идет редирект на новый. Но это будет работать только некоторое время (где-то до конца февраля). Так что, лучше переподпишитесь
![]()
П.С. Даже не спрашивайте, какой смылс был Гуглу затевать всю эту возьню… Кто ж их знает..
Так вот, собственно. Вернемся к теме разговора.
Когда-то давно, когда я вел блог по Интернет-маркетингу, у меня был отдельный раздел “Ответы на вопросы читателей”. В этом разделе я озвучивал свои ответы на те письма, которые ко мне присылали читатели. Иногда даже публиковал (с разрешения автора) исходные творения, ибо там тоже куча полезной информации… Сейчас мне тоже приходят письма от читателей и простых посетителей блога, но вопросов в них мало
Хотя иногда попадаются. Выносить эту переписку на блог не имеет смысла, потому что в основном это стандартные вопросы, аппелирующие чаще всего к мануалу.
Но.. Сегодня получил очень интересный вопрос от Виктора, который заставил меня почесать свой затылок и покурить немного мануал php…
Вопрос заключался в следующем: как сделать так, чтобы код php-файла выполнялся только в том случае, если этот файл влючен в приложение через include (или require), но не работал напрямую?
Для того, чтобы справиться с этой задачей - перечитал почти весь раздел Функции для работы с файловой системой ( http://ua2.php.net/manual/ru/ref.filesystem.php ). Кстати, очень полезно иногда такое делать. Потому что, вроде знаешь, знаешь… а тонкостей много можно найти.
Выход из поставленной ситуации был найденый такой.
/** * $_SERVER['SCRIPT_FILENAME'] = The absolute pathname of the currently executing script */ if ( realpath($_SERVER['SCRIPT_FILENAME']) == realpath(__FILE__) ) { exit; }
Думаю, логика понятна. Предположим, у нас есть файл /home/site/ajax/doit.php, который подлючает через require() файл /home/site/include/my.php. Если мы включили в последний код, который указан выше, то при вызове /home/site/ajax/doit.php:
realpath($_SERVER['SCRIPT_FILENAME']) - вернет /home/site/ajax/doit.php,
realpath(__FILE__) - вернет /home/site/include/my.php.
А как бы поступили вы?
Понравился пост? Будь в курсе последних событий: подпишись на RSS-ленту.!
- января 24
- 11 комментариев


