Foros del Web » Programando para Internet » PHP »

Interpretar formula con PHP

Estas en el tema de Interpretar formula con PHP en el foro de PHP en Foros del Web. Hola a todos los genios de PHP Tengo el siguiente caso y no se como resolverlo de forma segura, es decir sin arriesgar la seguridad ...
  #1 (permalink)  
Antiguo 08/11/2019, 08:29
Avatar de laureano59  
Fecha de Ingreso: febrero-2005
Mensajes: 377
Antigüedad: 14 años, 9 meses
Puntos: 0
Información Interpretar formula con PHP

Hola a todos los genios de PHP

Tengo el siguiente caso y no se como resolverlo de forma segura, es decir sin arriesgar la seguridad del programa.


El caso es que tengo varias formulas almacenadas en una tabla de la base de datos, el cual las aplico según las vaya necesitando:

Esta es la Tabla a modo ejemplo:

Id_for Formula
-----------------------
1 F1
2 F2
3 F3



Digamos que F1 es esta formula : si{ valor=0}haga{60100}si{ valor<= 190000}haga{25000}si{ valor> 190000}haga{(( valor-190000)*0.005)+25000}


Como convertirla a php de modo que el lenguaje pueda interpretarla sin afectar la seguridad del sistema:

Alguna idea o sugerencia de como poder hacer esto.

Gracias.
__________________
http://www.weblaum.com
Laureano Melo Medina
:arriba:
  #2 (permalink)  
Antiguo 08/11/2019, 09:08
 
Fecha de Ingreso: abril-2011
Mensajes: 40
Antigüedad: 8 años, 7 meses
Puntos: 5
Respuesta: Interpretar formula con PHP

Si las funciones están almacenadas en la BD en PHP válido, podrías usar eval (https://www.php.net/manual/es/function.eval.php) para ejecutarlas, con el consiguiente riesgo que eso supone. Si las formulas proceden de usuarios externos te podrían tomar el control del servidor fácilmente.

La mejor opción es implementar todas esas funciones en PHP y elegir qué función se ejecuta en base al criterio que establezcas (en este caso en base al ID de la fórmula):

Código PHP:
Ver original
  1. // declaras todas las funciones
  2.  
  3. function formula1($val) {
  4.   return $val*3;
  5. }
  6.  
  7. function formula2($val) {
  8.   return $val*$val;
  9. }
  10.  
  11. function formula3($val) {
  12.   return $val - $val*2 + 25;
  13. }
  14.  
  15. $Id_for = 2; // identificador de la fórmula
  16. $valor = 10; // valor que quieres usar como parámetro de la función
  17.  
  18. switch ($Id_for) {
  19.     case 1:
  20.         $resultado = formula1($valor);
  21.         break;
  22.     case 2:
  23.         $resultado = formula2($valor);
  24.         break;
  25.     case 3:
  26.         $resultado = formula3($valor);
  27.         break;
  28. }
  29.  
  30. echo $resultado;

Última edición por prueba230683; 08/11/2019 a las 09:46
  #3 (permalink)  
Antiguo 08/11/2019, 09:48
Avatar de laureano59  
Fecha de Ingreso: febrero-2005
Mensajes: 377
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Interpretar formula con PHP

Gracias por responder.
Lo que pasa es que estas formulas cambian cada año y los mismos usuarios son los que deben cambiar los valores en la base de datos, por eso es que no lo veo funcional manejarlas de la manera que me indicas, a demás es un sistema que va a funcionar en mucho lugares y esto generaría mas trabajo porque tocaría cambiarlo en cada servidor.
__________________
http://www.weblaum.com
Laureano Melo Medina
:arriba:
  #4 (permalink)  
Antiguo 08/11/2019, 10:00
 
Fecha de Ingreso: abril-2011
Mensajes: 40
Antigüedad: 8 años, 7 meses
Puntos: 5
Respuesta: Interpretar formula con PHP

Hay bastantes librerías para parsear expresiones matemáticas (de forma segura) en PHP (por ej. bcParserPHP).

https://www.mathparsers.com/math-parser-for-php/

Código PHP:
Ver original
  1. $parser = new MathParser();
  2. $parser->setExpression('X+Y/2');
  3. try {
  4.   $parser->parse();
  5.   $parser->setVariable('X', 12);
  6.   $parser->setVariable('Y', 5);
  7.   $result = $parser->getValue();
  8.   echo $result;
  9. } catch (MathParser_ParserException $ex) {
  10.   echo 'Expresion invalida: ' . $ex->getMessage() . "\n";
  11. }

Pero depende del formato en el que están almacenadas las fórmulas. El ejemplo que has puesto es pseudocódigo, ¿realmente las fórmulas están almacenadas en pseudocódigo?

edit. esa librería en concreto es de pago, pero las hay open source: https://github.com/mossadal/math-parser

Última edición por prueba230683; 08/11/2019 a las 10:07



La zona horaria es GMT -6. Ahora son las 21:26.