Foros del Web » Programando para Internet » PHP »

Meter funciones PHP en EVAL

Estas en el tema de Meter funciones PHP en EVAL en el foro de PHP en Foros del Web. Yo digo que en un tiro se ve , pa que discutir ? si se pueden agarrar a guamazos?? jaj no cierto abogo por la ...

  #31 (permalink)  
Antiguo 19/04/2011, 16:53
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 9 meses
Puntos: 155
Respuesta: Meter funciones PHP en EVAL

Yo digo que en un tiro se ve , pa que discutir ? si se pueden agarrar a guamazos??

jaj no cierto abogo por la tolerancia opino humildemente que si el rio suena es que agua lleva

Cita:
Iniciado por pateketrueke Ver Mensaje
en primer lugar deberías saber que usar eval() para un sistema de plantillas es lo mas prehistórico que existe, una pésima practica que solo personajes de tu talla podrían imaginar...

claro que sabemos, pero nadie te va a ayudar a darte un tiro... ¿o eso quieres?
muy bien el comentario de que poner funciones en eval es una mala practica , muy insegura , pero nula asertividad en cuanto a comentarios dando adjetivos de la talla de alguien a quien no se conoce , se ofende y no se aclara el punto , a raiz de esto el hilo perdio enfoque , solo es una opinion
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #32 (permalink)  
Antiguo 19/04/2011, 16:55
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 15 años, 6 meses
Puntos: 322
Respuesta: Meter funciones PHP en EVAL

No, no tengo ningún padecimiento cerebral...
Por favor indíqueme exactamente con negritas en qué línea dije que habías pedido cosas en bandeja de plata para quedarme más tranquilo de que he muerto
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #33 (permalink)  
Antiguo 19/04/2011, 16:56
 
Fecha de Ingreso: febrero-2005
Mensajes: 626
Antigüedad: 19 años, 8 meses
Puntos: 10
Respuesta: Meter funciones PHP en EVAL

Cita:
Iniciado por mogurbon Ver Mensaje
Yo digo que en un tiro se ve , pa que discutir ? si se pueden agarrar a guamazos??

jaj no cierto abogo por la tolerancia opino humildemente que si el rio suena es que agua lleva



muy bien el comentario de que poner funciones en eval es una mala practica , muy insegura , pero nula asertividad en cuanto a comentarios dando adjetivos de la talla de alguien a quien no se conoce , se ofende y no se aclara el punto , a raiz de esto el hilo perdio enfoque , solo es una opinion
Exacto, gracias por meter orden y justicia, pero es que hay gente que tiran la piedra y son tan cobardes que esconden la mano
  #34 (permalink)  
Antiguo 19/04/2011, 16:59
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Meter funciones PHP en EVAL

Bueno, volviendo al punto inicial eval lo que hace es ejecutar todo lo que coloques como texto. Debes entender que así como haces "normalmente" lo debes hacer entre comillas, recordando escapar aquellas comillas y los simbolos de $ cuando quieres mostrar la variable en sí, ejemplo
Código PHP:
Ver original
  1. <?php
  2. eval("\$foo = 'bar'; echo \$foo;"); // imprime bar

Si tratas de hacer esto
Código PHP:
Ver original
  1. <?php
  2. eval("$foo = 'bar'; echo $foo;");
Te va a soltar un error del tipo
Cita:

Notice: Undefined variable: foo in C:\xampp\htdocs\index.php on line 2

Notice: Undefined variable: foo in C:\xampp\htdocs\index.php on line 2

Parse error: syntax error, unexpected '=' in C:\xampp\htdocs\index.php(2) : eval()'d code on line 1
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #35 (permalink)  
Antiguo 19/04/2011, 17:00
 
Fecha de Ingreso: febrero-2005
Mensajes: 626
Antigüedad: 19 años, 8 meses
Puntos: 10
Respuesta: Meter funciones PHP en EVAL

Ya te lo he señalado, te tengo que poner el vinculo? a ver ahi va

http://www.forosdelweb.com/3823942-post22.html

Haz click en el, si sabes como?
  #36 (permalink)  
Antiguo 19/04/2011, 17:03
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Meter funciones PHP en EVAL

¿Verificaste el ejemplo que te coloqué?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #37 (permalink)  
Antiguo 19/04/2011, 17:04
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 15 años, 4 meses
Puntos: 641
Respuesta: Meter funciones PHP en EVAL

ya te puso el ejemplo abimaelrc trata de guiarte por ahi por favor sourcegeek y August den esto por terminado.
  #38 (permalink)  
Antiguo 19/04/2011, 17:08
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 14 años, 3 meses
Puntos: 202
Respuesta: Meter funciones PHP en EVAL

Aún siendo las formas correctas o no, tanto los que te han respondido de una forma u otra, te han recomendado que no uses eval, mejor include.
Con lo cual... ya lo básico está.
Tampoco es obligación de nadie de decirte como hacerlo con eval y no es por competencia o de no querer compartir el conocimiento, es una mera cuestión de usar un estandar y hacer las cosas de las formas más correctas.

Espero no te ofendas, pero a veces es mejor bajarse del burro y decir, bueno, si esto no es lo mejor, usemos esto otro. ¿Por qué usar algo habiendo otra cosa mejor?

Entiendo tus quejas sobre las formas, pero es que ya todos te han dicho que lo de eval es mala idea. No te compliques más

Un saludo.
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #39 (permalink)  
Antiguo 19/04/2011, 17:23
 
Fecha de Ingreso: febrero-2005
Mensajes: 626
Antigüedad: 19 años, 8 meses
Puntos: 10
Respuesta: Meter funciones PHP en EVAL

Cita:
Iniciado por abimaelrc Ver Mensaje
Bueno, volviendo al punto inicial eval lo que hace es ejecutar todo lo que coloques como texto. Debes entender que así como haces "normalmente" lo debes hacer entre comillas, recordando escapar aquellas comillas y los simbolos de $ cuando quieres mostrar la variable en sí, ejemplo
Código PHP:
Ver original
  1. <?php
  2. eval("\$foo = 'bar'; echo \$foo;"); // imprime bar

Si tratas de hacer esto
Código PHP:
Ver original
  1. <?php
  2. eval("$foo = 'bar'; echo $foo;");
Te va a soltar un error del tipo


REGRESANDO AL TEMA

PORQUE USO EVAL()?

He estado investigando en el vbulletin como este foro y otros frameworks y todavia usan eval para obtener un template, a lo mejor ya hay otras formas, pero creo que algunas aplicaciones han encontrado en eval una buena solucion

Acerca de la respuesta de abimaelrc yo uso eval de la siguiente manera

Código PHP:
      $variable="\$foo = 'bar'; echo \$foo;";
       eval(
'$salida = "' addslashes($variable) . '";');
        echo 
str_replace("\'""'",$salida); 
Sin embargo no me funciona correctamente, ya que me imprime lo siguiente:

Código PHP:
 'bar'; echo ; 
Cual seria el problema?,

Gracias por contestar y a todos los que contribuyeron, haciendo enfasis en la importancia de contestar sin ironias ni malos modos
  #40 (permalink)  
Antiguo 19/04/2011, 17:39
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Meter funciones PHP en EVAL

En primer lugar ya estás escapando, ¿por que volver a escapar? Lo pregunto sin que me des una contestación es solo una pregunta para que analizes. Si vuelves a escapar, lo que estarías haciendo es colocando una back-slash a los back-slash (\\). Error, porque no me fije que estabas declarando en otro lado. Lo que sucede con tu código es más bien que no está escapando nada porque ya la primera variable no muestra los backslash. En tu ejemplo quedaría así
Código PHP:
Ver original
  1. $salida = "$foo = 'bar'; echo $foo;";
Esto provoca este error
Cita:

Notice: Undefined variable: foo in C:\xampp\htdocs\b.php(3) : eval()'d code on line 1

Notice: Undefined variable: foo in C:\xampp\htdocs\b.php(3) : eval()'d code on line 1
= 'bar'; echo ;
Al parecer no tienes declarado ver todos los errores debes modificarlo para que puedas ver todo lo que haces mal, lee este tema http://www.forosdelweb.com/f18/aport...rrores-735515/

Para resolver se puede hacer de varias formas

1.
Código PHP:
Ver original
  1. <?php
  2. $variable = "\\\$foo = 'bar'; echo \\\$foo;";
  3. eval('$salida = "' . $variable . '";');
  4. echo $salida;

2.
Código PHP:
Ver original
  1. <?php
  2. $variable = "\$foo = 'bar'; echo \$foo;";
  3. eval('$salida = "' . str_replace('$', '\$', $variable) . '";');
  4. echo $salida;

La razón porque ocurre lo que te está pasando es que el primer escape es para la primera variable. Entonces cuando la mencionas por segunda vez lo que estás colocando es algo como
Cita:
eval('$salida = "' . $foo = 'bar'; echo $foo; . '";');
Porque la primera variable ya no contiene los back-slash, ya que su función era para la primera solamente.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #41 (permalink)  
Antiguo 19/04/2011, 19:17
 
Fecha de Ingreso: febrero-2005
Mensajes: 626
Antigüedad: 19 años, 8 meses
Puntos: 10
Respuesta: Meter funciones PHP en EVAL

Disculpame hice lo que me dijiste pero me imprime esto, en lugar de ejecutar el codigo php

$foo = 'bar'; echo $foo;
  #42 (permalink)  
Antiguo 19/04/2011, 19:49
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Meter funciones PHP en EVAL

Entonces ¿que quieres que se vea? porque eso es lo qur le estas indicando que haga.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #43 (permalink)  
Antiguo 19/04/2011, 21:49
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Meter funciones PHP en EVAL

Disculpen la tardanza, vaya lío.

La verdad no dejo de ver eval() como una solución anticuada, y hasta mal aplicada por ahora.

Se por experiencia que hay casos en los que puede ser necesario, pero solo en casos muy extremos, y casi imposibles de reproducir.

Esa es una de las razones principales de usar eval() para un sistema de plantillas, no sabes cuando algo puede fallar o estar mal escrito, porque incluso:

- Un error generado por mala sintaxis en eval() simplemente no te da la precisión que cualquier otro error si
- No ayuda a escribir código pues los resaltadores de sintaxis no funcionan
- El código resultante de las plantillas resulta complicado de leer
- etc...

Usando include:
Código PHP:
$foo 'x';
$bar 'D';

ob_start();
include 
'plantilla.php';
$candy ob_get_contents();
ob_end_clean();

echo 
$candy// xD 
plantilla.php
Código PHP:
<?php echo $foo?><?php echo $bar?>
Ese es el concepto mas primitivo y básico de un sistema de plantillas basado en include, y bueno, con ciertos añadidos para poder capturar dicho contenido en una variable.

Sigo sin entender, y ahora lo veo mas claro, cual es la necesidad explicita de usar eval() en lugar de otras técnicas.

A pesar del riesgo, ¿cual es la ventaja?

Si es por mera curiosidad la perdida de tiempo que esto implica.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Última edición por pateketrueke; 20/04/2011 a las 07:55 Razón: ;-)

Etiquetas: eval, funciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 6 personas




La zona horaria es GMT -6. Ahora son las 10:46.