Раздел вопрос-ответ [Решено] Ошибка при запуске kohana Call to undefined function __()

Ошибка при запуске kohana сайта.

ErrorException [ Fatal Error ]: Call to undefined function __()

В SYSPATH/classes/Kohana/Kohana/Exception.php [ 53 ]

Т.е. функция __() не определена. Ошибка возникает в конструкторе класса Kohana_Kohana_Exception в строке 53:

$message = __($message, $variables);

Call to undefined function __() в Kohana PHP framework

Почему возникает ошибка?

Скриншот ошибки:

Kohana ошибка ErrorException [ Fatal Error ]: Call to undefined function __()

share

1 ответ

Такой exception с фатальной ошибкой возникает, когда у kohana недостаточно прав для записи в директории application/logs и application/cache. Исправить ошибку просто, выставив права на каталоги:

chmod 777 application/logs/

chmod 777 application/cache/

Если директорий нет - создайте их и также дайте права на запись.

Странно, что разработчики не сделали для этого случая более понятный exception, проверив, какие выставлены права на директории.


UPD: при обновлении на php 7.4 столкнулся с тем что может возникать ошибка Call to undefined function __() в некоторых ситуациях в файле system/views/kohana/error.php. Нужно разбираться и читать логи application/logs/. Если с правами на запись в директории все хорошо, то 99% что ошибка порождена другой ошибкой, которую можно увидеть в логах. 

1) прочитайте внимательно последние логи из на предмет ошибок: application/logs/

2) как временный хак для проверки, можно функцию __ :

if ( ! function_exists('__'))
{
    function __($string, array $values = NULL, $lang = 'en-us')
    {
        if ($lang !== I18n::$lang)
        {
            // The message and target languages are different
            // Get the translation for this message
            $string = I18n::get($string);
        }

        return empty($values) ? $string : strtr($string, $values);
    }
}

продублировать и разместить прямо в index.php перед подключением bootstrap.php

3) Можно поиграться с настройками репортинга ошибок:

error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
//ini_set('display_errors',1);
//error_reporting(E_ALL | E_STRICT);

Стоит менять error_reporting в файле bootstrap.php после вызова Kohana::init.

То что посоветовал выше -- нужно лишь для дебага. Ядро kohana писалось достаточно давно и подводных камней при обновлении ядра и модулей будет не мало.

Также, можно прочитать про миграцию kohana на php 7+ c более старой версии php.

Добавить комментарий
    как минимум 5 символов

    icon Вход в систему

    зарегистрироваться
    НОВЫЕ ПОЛЬЗОВАТЕЛИ