208 похожих чатов

Т.К. при выполнении скрипта на кроне нет объекта $USER и

его метода $USER->GetId.
Хочу создать этот метод на событии OnBeforeProlog. Чтобы $USER->GetId начал выдавать заранее созданного мной пользователя "крон".

Какие есть подводные камни такого решения?

Изначально необходимость в этом возникла, т.к. в Б24 активити "пауза" продолжает выполнение бизнес процесса уже через крон, поэтому бизнесс процесс крашится при использовании $USER->GetId

15 ответов

23 просмотра

инициализировать CUser и авторизовать его с пользователем "крон" или сразу использовать айдишник юзера крон

mike- Автор вопроса
Артём Листиков
инициализировать CUser и авторизовать его с пользо...

Думаю проверять наличие метода $USER->GetId. И просто создавать свой метод, который будет возвращать нучное число. Объект CUSER создавать не буду

mike
Думаю проверять наличие метода $USER->GetId. И про...

$USER в принципе на этот момент не существует, поэтому в коде получается обращение к строке "$USER"

mike- Автор вопроса
Артём Листиков
$USER в принципе на этот момент не существует, поэ...

В итоге сделал так, буду тестировать (файл init.php).

mike
screenshot В итоге сделал так, буду тестировать (файл init.ph...

Потом когда в колено прилетит использование глобального объекта $USER не наследуемого от CUser, можешь вспомнишь что сделал не так

mike- Автор вопроса
Артём Листиков
Потом когда в колено прилетит использование глобал...

Например? Я потому в чат и написал, что хотел услышать мнение со стороны

mike
Например? Я потому в чат и написал, что хотел услы...

Я предложил вариант сразу использовать айдишник конкретного пользователя. Вместо конструкции получения айдишника от $USER. Это будет нормально работать при условии если в дальнейшем к объекту пользователя не происходит обращений. Если уж происходит дальнейшая работа с объектом, то и сделай чтоб в объекте был требуемый пользователь со всеми параметрами - авторизуйся под ним.

mike- Автор вопроса
Артём Листиков
Я предложил вариант сразу использовать айдишник ко...

Дело в том что на сколько я могу судить, при запуске через крон $USER это всегда строка. Даже возникающая ошибка пишет: не могу вызвать GetID от строки

mike
screenshot Дело в том что на сколько я могу судить, при запус...

Если не объявлен глобально объект $USER, а пытаешься что то с ним делать, то пхп на обращение к неопределенной ранее глобальной переменной вернёт строку. Следовательно и получается такая ошибка. GetID вызывается из локального кода. Если в нем нужен текущий пользователь - авторизуй по условию крона. Если всегда крон - вставляй айдишник вместо $USER->GetID()

mike- Автор вопроса
Артём Листиков
Если не объявлен глобально объект $USER, а пытаешь...

До выполнения моего кода переменная $USER уже определена. Имеет тип строку и содержит имя пользователя linux из под которого выполняется cron_events.php Впрочем возможно я не до конца понимаю что ты имеешь ввиду

mike
До выполнения моего кода переменная $USER уже опре...

А должен быть либо объектом класса CUser, либо его наследником

mike- Автор вопроса
mike
screenshot Ну так из коробки там строка =)

Это в ваших кронах, а битрикс и соответственно используемый код требует стандартного наличия в $USER объекта определенного класса

mike- Автор вопроса
Артём Листиков
Это в ваших кронах, а битрикс и соответственно исп...

То понятно. Речь то только про крон. Понятно что для обычных сессиях такое переоределение все поломает

mike
То понятно. Речь то только про крон. Понятно что д...

Я знать не знаю что там дальше творится после $USER->GetID(). Но если оно ожидает CUser, то предоставь его.

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта