Foren / National / Russian / Тех. поддержка / Как получить имя файла в котором вызывается функция

Kopusha
#1 23. Juni 2024, 00:47

К примеру моя тема aplha и есть кастомные функции alpha.php.
там какая то функция например
 

function get_country_info_count($cat) {
    global $db, $db_pages, $cfg; 
    try {
        $stmt = $db->prepare("SELECT COUNT(*) FROM $db_pages WHERE page_state = 0 AND page_cat = :cat");
        $stmt->bindParam(':cat', $cat, PDO::PARAM_STR);
        $stmt->execute();
        $result = $stmt->fetchColumn();
        return $result;
    } catch (PDOException $e) {
        return false;
    }
}

Эта функция вызывается в разных местах - например в page.edit.php
Как мне логировать в случае ошибки где вызов функции пошел не так?
Если так


    } catch (PDOException $e) {
        $file_name = basename(__FILE__);
        cot_log('Function get_country_info_count error in file '.$file_name, 'adm');
        return false;
    }

то получу file_name alpha.php
Если же так
 

        $backtrace = debug_backtrace();
        $caller_file = isset($backtrace[0]['file']) ? basename($backtrace[0]['file']) : 'unknown';
        cot_log('Function get_country_info_count error in file '.$caller_file, 'adm');

то получу cotemplate

Kabak
#2 24. Juni 2024, 06:20

1) В отладчике можно посмотереть. Думаю в PHP нет информации в каком файле находится та или иная функция. 

2) Посмотреть как реалигована генерация ошибок и предупреждений в Cotonti

Alex300
#3 25. Juni 2024, 04:46

debug_backtrace() содержит полный стек вызовов. Если получаете cotemplate - значит функция вызывается в шаблоне (tpl-файлы). Шаблоны сами не умеют выполнять PHP, по этому за них это делает шаблонизатор. Тут можно заглянуть в $backtrace[1] чтобы узнать откуда запущен рендер шаблона.

Также исключение $e, если не ошибаюсь, может содержать данные аналогичные debug_backtrace()

Есть миры, не здесь, там, где небеса горят, и моря засыпают, и реки дремлют; люди сделаны из дыма, а города – из песен. Где-то опасность, где-то несправедливость, даже где-то остыл чай. Идем Эйс, у нас много работы!...
...Sorry for my english...
Бесплатные расширения для Cotonti: https://lily-software.com/free-scripts/