[?]Para que sirve eval()?

Iniciado por braulio--, 25 Junio 2009, 23:54 PM

0 Miembros y 1 Visitante están viendo este tema.

braulio--

Pues esa es mi duda, mas que util la verdad es que me parece una vulnerabilidad para un programador descuidado.
Porque ejecutar una sentencia desde eval y no desde el código normal?
Gracias

Azielito

por que con eval() podes generar codigo PHP dinamicamente :D

generacion de arrays, funciones, cosas mas dinamicas que dinamicas :xD

Le metes un filtro para que solo pasen cosas locales, o sea, nunca recuperar variables ingresadas por el usuario, o evitarlo lo mas que puedas :D

Anibal784

eval() es la piedra fundamental de cualquier lenguaje interpretado, todo lo que hace un lenguaje interpretado es llamar a eval(), lisp hace eval(), python hace eval(), ruby hace eval(), perl hace eval() y PHP hace eval(), lee la línea y se la pasa a eval.

No hace mucho, recuerdo haber leído fundamentos de la programación en perl, en la cual hacían un requiere con la función eval, los pasos eran más o menos los siguiente:
tomaban el archivo con código perl
lo abrían
se lo pasaban a eval()
y ya tenía disponible todas las funciones de ese módulo, PHP nace de perl y por lo tanto no dudo que require/include no hagan más o meno eso, y sin eval no existiría ni include ni require, o sea, sería aún más chicloso el código PHP.
El que llega sin que lo llamen, se va sin que lo echen.

Citar
Vos no la votaste por eso la tenes adentro.
Lo fino no es lo tuyo, y a mi me chupa un huevo, soy argentino y no peronista, y eso es lo que realmente te molesta.

HardieVon

Cita de: Anibal784 en 26 Junio 2009, 03:23 AM
eval() es la piedra fundamental de cualquier lenguaje interpretado, todo lo que hace un lenguaje interpretado es llamar a eval(), lisp hace eval(), python hace eval(), ruby hace eval(), perl hace eval() y PHP hace eval(), lee la línea y se la pasa a eval.

No hace mucho, recuerdo haber leído fundamentos de la programación en perl, en la cual hacían un requiere con la función eval, los pasos eran más o menos los siguiente:
tomaban el archivo con código perl
lo abrían
se lo pasaban a eval()
y ya tenía disponible todas las funciones de ese módulo, PHP nace de perl y por lo tanto no dudo que require/include no hagan más o meno eso, y sin eval no existiría ni include ni require, o sea, sería aún más chicloso el código PHP.

man y tienes algun ejemplo en php que el eval sea impresindible?

por que yo eh hecho sistemas muy robustos y la verdad no eh ocupado mucho el eval, lo eh sabido suplementar.

algun ejemplo que no sea de criptologia

^Cloud^

Que yo sepa eval evalua una cadena y si en ella encuentra código ejecutable (en este caso PHP) lo ejecuta.

Es muy últil para hacer cosas como templates (minis... y normalmente se realiza en el buffer de salida de php) o tener formularios donde incluir código php en textareas... por ejemplo.


Un saludo,


Ahora resulta que imagino mi pasado
y llevo en esta clínica cuarenta años.
Nunca jamás he pisado la calle
y el electroshock ha sido mi padre

braulio--

He leído una situación útil.
Imagina que has sacado una fórmula matemática de una base de datos y la has guardado en la variable $formula.
Para obtener el resultado no podrías hacer
Código (php) [Seleccionar]

$resultado = $formula;

Porque resultado también contendría la formula.
Pero si puedes hacer esto :
Código (php) [Seleccionar]

eval("$resultado = ".$formula);

Y se tomaría $formula como una expresión matemática y no como una string.
Gracias por responder

Anibal784

@HardieVon
Código (php) [Seleccionar]

implode(',',
    array_map(create_function('$e', 'return \'"\'.$e.\'"\';'), array_values($attr_value))));

que tu no lo hayas usado no quiere decir que no exista y que no tenga utilidad, no se como estará implementada create_function, pero de lo que estoy seguro es que hace uso de la función eval().

Míralo como asm y C, en C puedes usar asm cuando quieras, sin embargo existen muchos sistemas y muy robustos que no tienen una línea de asm.
El que llega sin que lo llamen, se va sin que lo echen.

Citar
Vos no la votaste por eso la tenes adentro.
Lo fino no es lo tuyo, y a mi me chupa un huevo, soy argentino y no peronista, y eso es lo que realmente te molesta.

HardieVon

#7
Cita de: Anibal784 en 26 Junio 2009, 15:06 PM
@HardieVon
Código (php) [Seleccionar]

implode(',',
   array_map(create_function('$e', 'return \'"\'.$e.\'"\';'), array_values($attr_value))));

que tu no lo hayas usado no quiere decir que no exista y que no tenga utilidad, no se como estará implementada create_function, pero de lo que estoy seguro es que hace uso de la función eval().

Míralo como asm y C, en C puedes usar asm cuando quieras, sin embargo existen muchos sistemas y muy robustos que no tienen una línea de asm.
Fijate lo que dices men por que todo lo que escribiste es mentira, citame donde puse que no lo eh usado y donde dije que no existe?.

braulio - es  muy bueno tu ejemplo. ;)

PD: me apendeje.
ando estresado, ni mas ni menos ;)

que por cierto aqui en este post. demuestro un excelente uso.

http://foro.elhacker.net/php/iquestcomo_hago_include_a_una_web_externa-t259360.0.html