Linux vps-61133.fhnet.fr 4.9.0-19-amd64 #1 SMP Debian 4.9.320-2 (2022-06-30) x86_64
Apache/2.4.25 (Debian)
Server IP : 93.113.207.21 & Your IP : 216.73.216.35
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
var /
www /
html_old /
iscreen.bdcloud.fr /
core /
class /
Delete
Unzip
Name
Size
Permission
Date
Action
CMailFile.class.php
58.87
KB
-rwxrwxrwx
2020-09-12 04:27
CSMSFile.class.php
8.42
KB
-rwxrwxrwx
2020-05-28 20:13
antivir.class.php
5.27
KB
-rwxrwxrwx
2020-05-12 15:31
canvas.class.php
7.14
KB
-rwxrwxrwx
2020-05-12 15:31
ccountry.class.php
9.04
KB
-rwxrwxrwx
2020-05-28 20:13
comment.class.php
9.26
KB
-rwxrwxrwx
2020-05-28 20:13
commondocgenerator.class.php
65.38
KB
-rwxrwxrwx
2020-08-04 13:42
commoninvoice.class.php
28.52
KB
-rwxrwxrwx
2020-07-01 13:47
commonobject.class.php
292.11
KB
-rwxrwxrwx
2020-09-12 04:27
commonobjectline.class.php
2.84
KB
-rwxrwxrwx
2020-09-14 02:13
commonorder.class.php
2.64
KB
-rwxrwxrwx
2020-05-12 15:31
commonstickergenerator.class.php
10.69
KB
-rwxrwxrwx
2020-05-28 20:13
conf.class.php
36.9
KB
-rwxrwxrwx
2020-05-28 20:13
coreobject.class.php
11.67
KB
-rwxrwxrwx
2020-05-28 20:13
cstate.class.php
7.43
KB
-rwxrwxrwx
2020-05-28 20:13
ctypent.class.php
7.82
KB
-rwxrwxrwx
2020-05-28 20:13
ctyperesource.class.php
10.84
KB
-rwxrwxrwx
2020-05-12 15:31
cunits.class.php
13.52
KB
-rwxrwxrwx
2020-05-28 20:13
discount.class.php
28.9
KB
-rwxrwxrwx
2020-05-28 20:13
doleditor.class.php
16.77
KB
-rwxrwxrwx
2020-05-29 03:26
dolexception.class.php
1.02
KB
-rwxrwxrwx
2020-04-18 15:05
dolgeoip.class.php
6.21
KB
-rwxrwxrwx
2020-05-28 20:13
dolgraph.class.php
41.43
KB
-rwxrwxrwx
2020-06-27 01:56
dolreceiptprinter.class.php
38.3
KB
-rwxrwxrwx
2020-07-31 13:35
emailsenderprofile.class.php
15.08
KB
-rwxrwxrwx
2020-05-28 20:13
evalmath.class.php
17.03
KB
-rwxrwxrwx
2020-07-03 00:36
events.class.php
7.99
KB
-rwxrwxrwx
2020-05-28 20:13
extrafields.class.php
87.62
KB
-rwxrwxrwx
2020-08-04 12:39
extralanguages.class.php
5.65
KB
-rwxrwxrwx
2020-05-29 22:01
fileupload.class.php
17.66
KB
-rwxrwxrwx
2020-05-28 20:13
fiscalyear.class.php
11.05
KB
-rwxrwxrwx
2020-05-28 20:13
genericobject.class.php
1.19
KB
-rwxrwxrwx
2020-05-12 15:31
google.class.php
2.4
KB
-rwxrwxrwx
2020-05-12 15:31
hookmanager.class.php
14.57
KB
-rwxrwxrwx
2020-05-28 20:13
html.form.class.php
340.25
KB
-rwxrwxrwx
2020-09-21 12:20
html.formaccounting.class.php
17.42
KB
-rwxrwxrwx
2020-05-28 20:13
html.formactions.class.php
17.53
KB
-rwxrwxrwx
2020-05-28 20:13
html.formadmin.class.php
14.52
KB
-rwxrwxrwx
2020-05-28 20:13
html.formbank.class.php
2.15
KB
-rwxrwxrwx
2020-05-12 15:31
html.formbarcode.class.php
8.23
KB
-rwxrwxrwx
2020-05-28 20:13
html.formcategory.class.php
1.95
KB
-rwxrwxrwx
2020-05-12 15:31
html.formcompany.class.php
36.25
KB
-rwxrwxrwx
2020-05-28 20:13
html.formcontract.class.php
6.32
KB
-rwxrwxrwx
2020-05-28 20:13
html.formcron.class.php
3.3
KB
-rwxrwxrwx
2020-04-18 15:05
html.formfile.class.php
80.61
KB
-rwxrwxrwx
2020-08-17 19:55
html.formintervention.class.php
4.13
KB
-rwxrwxrwx
2020-05-28 20:13
html.formmail.class.php
59.87
KB
-rwxrwxrwx
2020-09-12 04:27
html.formmailing.class.php
1.93
KB
-rwxrwxrwx
2020-05-12 15:31
html.formmargin.class.php
12.18
KB
-rwxrwxrwx
2020-05-28 20:13
html.formorder.class.php
3.21
KB
-rwxrwxrwx
2020-05-12 15:31
html.formother.class.php
61.83
KB
-rwxrwxrwx
2020-05-28 20:13
html.formprojet.class.php
25.19
KB
-rwxrwxrwx
2020-05-28 20:13
html.formpropal.class.php
4.85
KB
-rwxrwxrwx
2020-05-28 20:13
html.formsms.class.php
13.49
KB
-rwxrwxrwx
2020-05-28 20:13
html.formsocialcontrib.class.php
4.22
KB
-rwxrwxrwx
2020-05-28 20:13
html.formticket.class.php
41.06
KB
-rwxrwxrwx
2020-06-11 23:38
html.formwebsite.class.php
9.74
KB
-rwxrwxrwx
2020-05-28 20:13
index.html
0
B
-rwxrwxrwx
2020-04-18 15:05
infobox.class.php
12.4
KB
-rwxrwxrwx
2020-08-23 19:25
interfaces.class.php
15.9
KB
-rwxrwxrwx
2020-05-28 20:13
ldap.class.php
42.04
KB
-rwxrwxrwx
2020-05-28 20:13
lessc.class.php
96.78
KB
-rwxrwxrwx
2020-05-23 13:38
link.class.php
11.63
KB
-rwxrwxrwx
2020-05-28 20:13
menu.class.php
4.69
KB
-rwxrwxrwx
2020-06-07 18:52
menubase.class.php
28.75
KB
-rwxrwxrwx
2020-06-27 15:23
notify.class.php
31.97
KB
-rwxrwxrwx
2020-05-28 20:13
openid.class.php
16.25
KB
-rwxrwxrwx
2020-05-28 20:13
rssparser.class.php
21.93
KB
-rwxrwxrwx
2020-06-22 00:58
smtps.class.php
68.54
KB
-rwxrwxrwx
2020-07-03 00:45
stats.class.php
19.11
KB
-rwxrwxrwx
2020-05-28 20:13
translate.class.php
42.22
KB
-rwxrwxrwx
2020-09-12 04:29
utils.class.php
36.99
KB
-rwxrwxrwx
2020-05-28 20:13
vcard.class.php
10.56
KB
-rwxrwxrwx
2020-05-12 15:31
workboardresponse.class.php
1.75
KB
-rwxrwxrwx
2020-04-18 15:05
Save
Rename
<?php /* * ================================================================================ * * EvalMath - PHP Class to safely evaluate math expressions * Copyright (C) 2005 Miles Kaufmann <http://www.twmagic.com/> * * ================================================================================ * * NAME * EvalMath - safely evaluate math expressions * * SYNOPSIS * include('evalmath.class.php'); * $m = new EvalMath; * // basic evaluation: * $result = $m->evaluate('2+2'); * // supports: order of operation; parentheses; negation; built-in functions * $result = $m->evaluate('-8(5/2)^2*(1-sqrt(4))-8'); * // create your own variables * $m->evaluate('a = e^(ln(pi))'); * // or functions * $m->evaluate('f(x,y) = x^2 + y^2 - 2x*y + 1'); * // and then use them * $result = $m->evaluate('3*f(42,a)'); * * DESCRIPTION * Use the EvalMath class when you want to evaluate mathematical expressions * from untrusted sources. You can define your own variables and functions, * which are stored in the object. Try it, it's fun! * * METHODS * $m->evalute($expr) * Evaluates the expression and returns the result. If an error occurs, * prints a warning and returns false. If $expr is a function assignment, * returns true on success. * * $m->e($expr) * A synonym for $m->evaluate(). * * $m->vars() * Returns an associative array of all user-defined variables and values. * * $m->funcs() * Returns an array of all user-defined functions. * * PARAMETERS * $m->suppress_errors * Set to true to turn off warnings when evaluating expressions * * $m->last_error * If the last evaluation failed, contains a string describing the error. * (Useful when suppress_errors is on). * * $m->last_error_code * If the last evaluation failed, 2 element array with numeric code and extra info * * AUTHOR INFORMATION * Copyright 2005, Miles Kaufmann. * * LICENSE * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * 1 Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote * products derived from this software without specific prior written * permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ /** * \file core/class/evalmath.class.php * \ingroup core * \brief This file for Math evaluation */ /** * Class EvalMath */ class EvalMath { public $suppress_errors = false; public $last_error = null; public $last_error_code = null; public $v = array('e' => 2.71, 'pi' => 3.14159); // variables (and constants) public $f = array(); // user-defined functions public $vb = array('e', 'pi'); // constants public $fb = array( // built-in functions 'sin', 'sinh', 'arcsin', 'asin', 'arcsinh', 'asinh', 'cos', 'cosh', 'arccos', 'acos', 'arccosh', 'acosh', 'tan', 'tanh', 'arctan', 'atan', 'arctanh', 'atanh', 'sqrt', 'abs', 'ln', 'log', 'intval'); /** * Constructor */ public function __construct() { // make the variables a little more accurate $this->v['pi'] = pi(); $this->v['e'] = exp(1); } /** * Evaluate * * @param string $expr String * @return boolean|number|NULL|mixed Result */ public function e($expr) { return $this->evaluate($expr); } /** * Evaluate * * @param string $expr String * @return boolean|number|NULL|mixed Result */ public function evaluate($expr) { $this->last_error = null; $this->last_error_code = null; $expr = trim($expr); if (substr($expr, - 1, 1) == ';') $expr = substr($expr, 0, strlen($expr) - 1); // strip semicolons at the end // =============== // is it a variable assignment? $matches = array(); if (preg_match('/^\s*([a-z]\w*)\s*=\s*(.+)$/', $expr, $matches)) { if (in_array($matches[1], $this->vb)) { // make sure we're not assigning to a constant return $this->trigger(1, "cannot assign to constant '$matches[1]'", $matches[1]); } if (($tmp = $this->pfx($this->nfx($matches[2]))) === false) return false; // get the result and make sure it's good $this->v[$matches[1]] = $tmp; // if so, stick it in the variable array return $this->v[$matches[1]]; // and return the resulting value // =============== // is it a function assignment? } elseif (preg_match('/^\s*([a-z]\w*)\s*\(\s*([a-z]\w*(?:\s*,\s*[a-z]\w*)*)\s*\)\s*=\s*(.+)$/', $expr, $matches)) { $fnn = $matches[1]; // get the function name if (in_array($matches[1], $this->fb)) { // make sure it isn't built in return $this->trigger(2, "cannot redefine built-in function '$matches[1]()'", $matches[1]); } $args = explode(",", preg_replace("/\s+/", "", $matches[2])); // get the arguments if (($stack = $this->nfx($matches[3])) === false) return false; // see if it can be converted to postfix $nbstack = count($stack); for ($i = 0; $i < $nbstack; $i++) { // freeze the state of the non-argument variables $token = $stack[$i]; if (preg_match('/^[a-z]\w*$/', $token) and !in_array($token, $args)) { if (array_key_exists($token, $this->v)) { $stack[$i] = $this->v[$token]; } else { return $this->trigger(3, "undefined variable '$token' in function definition", $token); } } } $this->f[$fnn] = array('args' => $args, 'func' => $stack); return true; // =============== } else { return $this->pfx($this->nfx($expr)); // straight up evaluation, woo } } /** * vars * * @return string Output */ public function vars() { $output = $this->v; unset($output['pi']); unset($output['e']); return $output; } /** * vars * * @return string Output */ private function funcs() { $output = array(); foreach ($this->f as $fnn => $dat) $output[] = $fnn.'('.implode(',', $dat['args']).')'; return $output; } // ===================== HERE BE INTERNAL METHODS ====================\\ /** * Convert infix to postfix notation * * @param string $expr Expression * @return string Output */ private function nfx($expr) { $index = 0; $stack = new EvalMathStack(); $output = array(); // postfix form of expression, to be passed to pfx() $expr = trim(strtolower($expr)); $ops = array('+', '-', '*', '/', '^', '_'); $ops_r = array('+' => 0, '-' => 0, '*' => 0, '/' => 0, '^' => 1); // right-associative operator? $ops_p = array('+' => 0, '-' => 0, '*' => 1, '/' => 1, '_' => 1, '^' => 2); // operator precedence $expecting_op = false; // we use this in syntax-checking the expression // and determining when a - is a negation $matches = array(); if (preg_match("/[^\w\s+*^\/()\.,-]/", $expr, $matches)) { // make sure the characters are all good return $this->trigger(4, "illegal character '{$matches[0]}'", $matches[0]); } while (1) { // 1 Infinite Loop ;) $op = substr($expr, $index, 1); // get the first character at the current index // find out if we're currently at the beginning of a number/variable/function/parenthesis/operand $match = array(); $ex = preg_match('/^([a-z]\w*\(?|\d+(?:\.\d*)?|\.\d+|\()/', substr($expr, $index), $match); // =============== if ($op == '-' and !$expecting_op) { // is it a negation instead of a minus? $stack->push('_'); // put a negation on the stack $index++; } elseif ($op == '_') { // we have to explicitly deny this, because it's legal on the stack return $this->trigger(4, "illegal character '_'", "_"); // but not in the input expression // =============== } elseif ((in_array($op, $ops) or $ex) and $expecting_op) { // are we putting an operator on the stack? if ($ex) { // are we expecting an operator but have a number/variable/function/opening parethesis? $op = '*'; $index--; // it's an implicit multiplication } // heart of the algorithm: while ($stack->count > 0 and ($o2 = $stack->last()) and in_array($o2, $ops) and ($ops_r[$op] ? $ops_p[$op] < $ops_p[$o2] : $ops_p[$op] <= $ops_p[$o2])) { $output[] = $stack->pop(); // pop stuff off the stack into the output } // many thanks: http://en.wikipedia.org/wiki/Reverse_Polish_notation#The_algorithm_in_detail $stack->push($op); // finally put OUR operator onto the stack $index++; $expecting_op = false; // =============== } elseif ($op == ')' and $expecting_op) { // ready to close a parenthesis? while (($o2 = $stack->pop()) != '(') { // pop off the stack back to the last ( if (is_null($o2)) { return $this->trigger(5, "unexpected ')'", ")"); } else { $output[] = $o2; } } if (preg_match("/^([a-z]\w*)\($/", $stack->last(2), $matches)) { // did we just close a function? $fnn = $matches[1]; // get the function name $arg_count = $stack->pop(); // see how many arguments there were (cleverly stored on the stack, thank you) $output[] = $stack->pop(); // pop the function and push onto the output if (in_array($fnn, $this->fb)) { // check the argument count if ($arg_count > 1) return $this->trigger(6, "wrong number of arguments ($arg_count given, 1 expected)", array($arg_count, 1)); } elseif (array_key_exists($fnn, $this->f)) { if ($arg_count != count($this->f[$fnn]['args'])) return $this->trigger(6, "wrong number of arguments ($arg_count given, ".count($this->f[$fnn]['args'])." expected)", array($arg_count, count($this->f[$fnn]['args']))); } else { // did we somehow push a non-function on the stack? this should never happen return $this->trigger(7, "internal error"); } } $index++; // =============== } elseif ($op == ',' and $expecting_op) { // did we just finish a function argument? while (($o2 = $stack->pop()) != '(') { if (is_null($o2)) { return $this->trigger(5, "unexpected ','", ","); // oops, never had a ( } else { $output[] = $o2; // pop the argument expression stuff and push onto the output } } // make sure there was a function if (!preg_match("/^([a-z]\w*)\($/", $stack->last(2), $matches)) return $this->trigger(5, "unexpected ','", ","); $stack->push($stack->pop() + 1); // increment the argument count $stack->push('('); // put the ( back on, we'll need to pop back to it again $index++; $expecting_op = false; // =============== } elseif ($op == '(' and !$expecting_op) { $stack->push('('); // that was easy $index++; $allow_neg = true; // =============== } elseif ($ex and !$expecting_op) { // do we now have a function/variable/number? $expecting_op = true; $val = $match[1]; if (preg_match("/^([a-z]\w*)\($/", $val, $matches)) { // may be func, or variable w/ implicit multiplication against parentheses... if (in_array($matches[1], $this->fb) or array_key_exists($matches[1], $this->f)) { // it's a func $stack->push($val); $stack->push(1); $stack->push('('); $expecting_op = false; } else { // it's a var w/ implicit multiplication $val = $matches[1]; $output[] = $val; } } else { // it's a plain old var or num $output[] = $val; } $index += strlen($val); // =============== } elseif ($op == ')') { // miscellaneous error checking return $this->trigger(5, "unexpected ')'", ")"); } elseif (in_array($op, $ops) and !$expecting_op) { return $this->trigger(8, "unexpected operator '$op'", $op); } else { // I don't even want to know what you did to get here return $this->trigger(9, "an unexpected error occured"); } if ($index == strlen($expr)) { if (in_array($op, $ops)) { // did we end with an operator? bad. return $this->trigger(10, "operator '$op' lacks operand", $op); } else { break; } } while (substr($expr, $index, 1) == ' ') { // step the index past whitespace (pretty much turns whitespace $index++; // into implicit multiplication if no operator is there) } } while (!is_null($op = $stack->pop())) { // pop everything off the stack and push onto output if ($op == '(') return $this->trigger(11, "expecting ')'", ")"); // if there are (s on the stack, ()s were unbalanced $output[] = $op; } return $output; } /** * evaluate postfix notation * * @param string $tokens Expression * @param array $vars Array * @return string Output */ private function pfx($tokens, $vars = array()) { if ($tokens == false) return false; $stack = new EvalMathStack(); foreach ($tokens as $token) { // nice and easy // if the token is a binary operator, pop two values off the stack, do the operation, and push the result back on $matches = array(); if (in_array($token, array('+', '-', '*', '/', '^'))) { if (is_null($op2 = $stack->pop())) return $this->trigger(12, "internal error"); if (is_null($op1 = $stack->pop())) return $this->trigger(13, "internal error"); switch ($token) { case '+': $stack->push($op1 + $op2); break; case '-': $stack->push($op1 - $op2); break; case '*': $stack->push($op1 * $op2); break; case '/': if ($op2 == 0) return $this->trigger(14, "division by zero"); $stack->push($op1 / $op2); break; case '^': $stack->push(pow($op1, $op2)); break; } // if the token is a unary operator, pop one value off the stack, do the operation, and push it back on } elseif ($token == "_") { $stack->push(-1 * $stack->pop()); // if the token is a function, pop arguments off the stack, hand them to the function, and push the result back on } elseif (preg_match("/^([a-z]\w*)\($/", $token, $matches)) { // it's a function! $fnn = $matches[1]; if (in_array($fnn, $this->fb)) { // built-in function: if (is_null($op1 = $stack->pop())) return $this->trigger(15, "internal error"); $fnn = preg_replace("/^arc/", "a", $fnn); // for the 'arc' trig synonyms if ($fnn == 'ln') $fnn = 'log'; eval('$stack->push('.$fnn.'($op1));'); // perfectly safe eval() } elseif (array_key_exists($fnn, $this->f)) { // user function // get args $args = array(); for ($i = count($this->f[$fnn]['args']) - 1; $i >= 0; $i--) { if (is_null($args[$this->f[$fnn]['args'][$i]] = $stack->pop())) return $this->trigger(16, "internal error"); } $stack->push($this->pfx($this->f[$fnn]['func'], $args)); // yay... recursion!!!! } // if the token is a number or variable, push it on the stack } else { if (is_numeric($token)) { $stack->push($token); } elseif (array_key_exists($token, $this->v)) { $stack->push($this->v[$token]); } elseif (array_key_exists($token, $vars)) { $stack->push($vars[$token]); } else { return $this->trigger(17, "undefined variable '$token'", $token); } } } // when we're out of tokens, the stack should have a single element, the final result if ($stack->count != 1) return $this->trigger(18, "internal error"); return $stack->pop(); } /** * trigger an error, but nicely, if need be * * @param string $code Code * @param string $msg Msg * @param string|null $info String * @return boolean False */ public function trigger($code, $msg, $info = null) { $this->last_error = $msg; $this->last_error_code = array($code, $info); if (!$this->suppress_errors) trigger_error($msg, E_USER_WARNING); return false; } } /** * Class for internal use */ class EvalMathStack { public $stack = array(); public $count = 0; /** * push * * @param string $val Val * @return void */ public function push($val) { $this->stack[$this->count] = $val; $this->count++; } /** * pop * * @return mixed Stack */ public function pop() { if ($this->count > 0) { $this->count--; return $this->stack[$this->count]; } return null; } /** * last * * @param int $n N * @return mixed Stack */ public function last($n = 1) { if (isset($this->stack[$this->count - $n])) { return $this->stack[$this->count - $n]; } return; } }