PHP-функции внутри Trade Formula

Post Reply
adaliska
Posts: 151
Joined: Sun Dec 23, 2012 9:20 am

PHP-функции внутри Trade Formula

Post 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) Как туда добавить, например, вызов своей кастомной функции?
admin
Site Admin
Posts: 37993
Joined: Wed Sep 10, 2008 11:43 am

Re: PHP-функции внутри Trade Formula

Post by admin »

Так сделано в целях секьюрности.

Смысл следующий: раньше там был просто eval, крон запускается от юзера, соотв туда можно было вписать любой код и он выполнился бы от юзера, что давало большой простор в плане действий если кто-не-надо попал в админку.

По этой причине заменили eval - фактическим разбором формулы "руками", ессно руками все функции пхп не перепишешь ибо это получится переписывание пхп на пхп )

Поэтому если надо там что-то сложное чего не поддерживает "разбор руками" - надо в config.php добавить $config['allow_eval'] = true; и оно будет там делать eval и соотв поддерживать весь пхп функционал, но с рисками описанными выше.
Don't forget to run script update
richmantrade
Posts: 1036
Joined: Tue Dec 04, 2012 8:46 am

Re: PHP-функции внутри Trade Formula

Post 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']) );
}
admin
Site Admin
Posts: 37993
Joined: Wed Sep 10, 2008 11:43 am

Re: PHP-функции внутри Trade Formula

Post by admin »

1; в начале надо что б закрыть дефолтную формулу. Чисто технический вопрос.
Don't forget to run script update
Post Reply