Последнее обновление:
Как установить, из этого самого ли файла PHP произошел вызов функции?
Допустим, у нас имеется файл РНР с именем first.php. В нем имеется следующая конструкция:
<?php
include $_SERVER['DOCUMENT_ROOT']. ‘/ … path … /’. second.php;
Т.е. скрипт в первом файле (first.php
) подключает все содержимое из файла second.php
. Вполне может быть так, что каждый из файлов обращается к одной с той же функции (находящейся, быть может, в каком-то другом файле и соответствующим образом подключенной к обоим скриптам).
Иногда при работе скриптов РНР нужно знать, из того же самого файла (скрипта) произошел вызов некоей функции, или из другого. Применительно к данной ситуации – как выяснить, из какого именно файла произошел вызов функции: из first.php
или из second.php
? Или, похожая проблема: требуется знать, какой именно скрипт записал данные (в текстовый файл) или вывел данные клиенту (например, на экран браузера).
Как это узнать?
В PHP есть, как минимум, два средства, дающие возможность узнать имя скрипта (при условии, что они будут размещены в second.php
):
- __FILE__ // Полный путь к файлу second.php
- $_SERVER['PHP_SELF'] // Относительный (начиная от корня сайта / ) путь к файлу first.php
Однако, дело немного осложняется тем, что в Windows разделители компонентов путей будут разными. Потому как в Windows используется обратный слеш \
, в отличие от Linux, где используется прямой слеш /
. Чтобы исправить ситуацию, необходимо все \
заменить на /
, т.е. получится примерно такой код:
- if(stripos(str_replace('\\', '/', __FILE__), $_SERVER['PHP_SELF']) !== FALSE){
- // Работал скрипт из файла second.php
- }else{
- // Работал скрипт из файла first.php
- }
Впрочем, возможно, в РНР7 есть какие-то более адекватные способы для того, чтобы узнать, какой именно скрипт работал с той или иной функцией. Однако, и этот способ - вполне рабочий и корректный.