Page 1 of 1
PHP-функции внутри Trade Formula
Posted: Sat May 03, 2014 2:59 pm
by adaliska
Беру копипаст из доки
Code: Select all
@round( ($d['day']['ctd']+$d['day']['cud'])/$d['day']['od']* $d['trat'] / 100);
работает.
А стоит только добавить пару элементарных математических функций (min, max) - так сразу в таблице Trade в колонке Priority всё по нулям. При том, что сам по себе код формулы синтаксически валиден, и в отдельном php-файлике отрабатывает без проблем.
Вопросы:
1) Почему так может быть?
2) Как оно устроено в принципе? Это eval в php-коде?
3) Как туда добавить, например, вызов своей кастомной функции?
Re: PHP-функции внутри Trade Formula
Posted: Sat May 03, 2014 3:19 pm
by admin
Так сделано в целях секьюрности.
Смысл следующий: раньше там был просто eval, крон запускается от юзера, соотв туда можно было вписать любой код и он выполнился бы от юзера, что давало большой простор в плане действий если кто-не-надо попал в админку.
По этой причине заменили eval - фактическим разбором формулы "руками", ессно руками все функции пхп не перепишешь ибо это получится переписывание пхп на пхп )
Поэтому если надо там что-то сложное чего не поддерживает "разбор руками" - надо в config.php добавить $config['allow_eval'] = true; и оно будет там делать eval и соотв поддерживать весь пхп функционал, но с рисками описанными выше.
Re: PHP-функции внутри Trade Formula
Posted: Tue Apr 04, 2017 12:07 pm
by richmantrade
А как скоро после изменения формулы (от
Fett) и добавления
$config['allow_eval'] = true; в графе Priority будут не нули ?
Спустя несколько минут.
Заработало.
Только вот не пойму, зачем нужна единица с ; вначале ?
Так работает:
Code: Select all
1; if ( $d['day']['cd'] < 1 and $d['day']['ud'] > 0 and $d['day']['od'] > 0 ) {
$_POST[priority] = ( ($d['day']['ud']/$d['day']['od'])*10 );
} elseif ( $d['day']['od'] < 1 and $d['day']['cd'] > 0 ) {
$_POST[priority] = ( ($d['day']['quality'] + $d['day']['quality_url'])*10 );
} elseif ( $d['day']['od'] < 1 and $d['day']['cd'] < 1 ) {
$_POST[priority] = ( ($d['day']['ud'])*10 );
} else {
$_POST[priority] = @round ( (($d['day']['cd']/$d['day']['od'])*100) * ($d['day']['ud']/$d['day']['od']) );
}
так не работает (Priority - нули)
Code: Select all
if ( $d['day']['cd'] < 1 and $d['day']['ud'] > 0 and $d['day']['od'] > 0 ) {
$_POST[priority] = ( ($d['day']['ud']/$d['day']['od'])*10 );
} elseif ( $d['day']['od'] < 1 and $d['day']['cd'] > 0 ) {
$_POST[priority] = ( ($d['day']['quality'] + $d['day']['quality_url'])*10 );
} elseif ( $d['day']['od'] < 1 and $d['day']['cd'] < 1 ) {
$_POST[priority] = ( ($d['day']['ud'])*10 );
} else {
$_POST[priority] = @round ( (($d['day']['cd']/$d['day']['od'])*100) * ($d['day']['ud']/$d['day']['od']) );
}
Re: PHP-функции внутри Trade Formula
Posted: Tue Apr 04, 2017 4:50 pm
by admin
1; в начале надо что б закрыть дефолтную формулу. Чисто технический вопрос.