示例#1
0
 /**
  * Метод убеждается в том, что провайдер безопасности установлен.
  * Наша задача - установить провайдер один раз и проверить, чтобы он больше не менялся.
  */
 public static function init()
 {
     self::$inited = check_condition(!self::$inited, 'Cannot initialize ' . __CLASS__ . ' twice');
     if (self::$provider instanceof PsSecurityProvider) {
         //Провайдер безопастности был уже установлен
     } else {
         check_condition(is_null(self::$provider), __CLASS__ . ' is not correctly initialized');
         if (PsContext::isCmd()) {
             //Если работаем под процессом - установим специальный провайдер безопастности
             self::$provider = new PsSecurityProviderCmd();
         } else {
             //Устанавливаем базовый провайдер безопасности на основе сессии
             self::$provider = new PsSecurityProviderSdk();
         }
     }
     check_condition(!PsContext::isCmd() || self::$provider instanceof PsSecurityProviderCmd, 'Invalid security provider for cmd process');
     $LOGGER = PsLogger::inst(__CLASS__);
     if ($LOGGER->isEnabled()) {
         $LOGGER->info('Context:       {}', PsContext::describe());
         $LOGGER->info('Provider:      {}', get_class(self::$provider));
         $LOGGER->info('Is authorized: {}', var_export(self::$provider->isAuthorized(), true));
         $LOGGER->info('Is admin:      {}', var_export(self::$provider->isAuthorizedAsAdmin(), true));
         $LOGGER->info('User ID:       {}', self::$provider->getUserId());
     }
 }
示例#2
0
    foreach ($exception->getTrace() as $num => $stackItem) {
        $str = $num . '# ' . (array_key_exists('file', $stackItem) ? $stackItem['file'] : '') . ' (' . (array_key_exists('line', $stackItem) ? $stackItem['line'] : '') . ')';
        dolog(pad_left('', $num, ' ') . $str);
    }
    dolog('');
    die(1);
}
restore_exception_handler();
set_exception_handler('print_stack');
//Параметр $CALLED_FILE должен установлен запущенным процессом
check_condition($CALLED_FILE, 'Global variable $CALLED_FILE is not set');
check_condition(is_file($CALLED_FILE), "Programm file {$CALLED_FILE} is not found");
//Функция должна быть определена запущенным процессом
check_condition(is_callable(PS_PROCESS_FUNCTION_NAME), PS_PROCESS_FUNCTION_NAME . ' is not callable');
//Проверим, что программа вызвана из командной строки
check_condition(is_array($argv) && PsContext::isCmd(), "Programm {$CALLED_FILE} can be runned only from console");
//В необязательном режиме подключим папку src нашего процесса
Autoload::inst()->registerBaseDir(array(dirname($CALLED_FILE), DirManager::DIR_SRC), false);
//Определим вспомогательную функцию логирования
function dolog($info = '')
{
    call_user_func_array(array(PsLogger::inst('PROCESS'), 'info'), func_get_args());
}
//Заругистрируем функцию, которая после окончания процесса запишет лог в файл
function dimpConsoleLog()
{
    global $CALLED_FILE;
    if ($CALLED_FILE) {
        $log = file_path(dirname($CALLED_FILE), get_file_name($CALLED_FILE), 'log');
        $FULL_LOG = PsLogger::controller()->getFullLog();
        $FULL_LOG = mb_convert_encoding($FULL_LOG, 'UTF-8', 'cp866');
示例#3
0
 /**
  * Метод проверяет, нужно ли подключать окружение.
  */
 private static function isSkipInclude()
 {
     return PsContext::isCmd();
 }
示例#4
0
/*
 * Зарегистрируем наш обработчик для php ошибок
 */
ExceptionHandler::register4errors();
/*
 * Подключим обработчик эксепшенов. Позднее мы подключим "красивый" обработчик ошибок.
 */
ExceptionHandler::register();
/*
 * Подключим загрузчик служебных классов
 */
Autoload::inst()->register();
/*
 * Если мы работаем под процессом - не подключаемся автоматически к DB и используем специальный провайдер безопасности
 */
if (PsContext::isCmd()) {
    /*
     * Установим специальный провайдер безопасности для консольного процесса
     */
    PsSecurity::set(new PsSecurityProviderCmd());
} else {
    /*
     * Автоматически подключаемся к БД
     */
    PsConnectionPool::configure(PsConnectionParams::production());
}
/*
 * Инициализируем окружение, если мы работаем под ним.
 * Подключаемое окружение может установить свой провайдер безопасности.
 * Важно! Вызов не перемещать в if, так как метод init должен быть вызван обязательно.
 */