Foros del Web » Programando para Internet » PHP »

eval?

Estas en el tema de eval? en el foro de PHP en Foros del Web. cuando utilizo eval() para mostrar codigo HTML me da este error Cita: Parse error, unexpected '<' in .... archivo..lalal..... : eval()'d code in line 1 ...
  #1 (permalink)  
Antiguo 30/08/2003, 18:27
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 21 años, 5 meses
Puntos: 1
eval?

cuando utilizo eval() para mostrar codigo HTML me da este error

Cita:
Parse error, unexpected '<' in .... archivo..lalal..... : eval()'d code in line 1
A que se debe ese error que debo hacer para que no ocurra


Saludos
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #2 (permalink)  
Antiguo 30/08/2003, 19:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Y para que usas eval() para mostrar código HTML?

No te sirve un simple echo:

echo "<html><head><title>bla bla</title></head><body><b>Hola mundo</b></body></html>";

O bien usando sintax Here DOC:

Código PHP:
echo <<<HTML
<html>
<head>
<title>bla bla</title>
</head>
<body>
<b>Hola mundo</b>
</body>
</html>";
HTML; 
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 30/08/2003, 19:24
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 21 años, 5 meses
Puntos: 1
bueno la razon es simple

Estoy trabajando en un motor de templates , ya se que existen muchos y para que reinventar la rueda, pero me interesa hacerme las cosas solo.... y sirve para aprender además

El codigo de la clase está Aqui

No se como hacer que muestre el codigo, osea, con un echo en ves de eval() me muestra excelente todo, pero, alguna ves me dijiste tu mismo cluster que no ultilizara echo dentro de las funciones o clases si no un return o algo asi.

El eval() está en la linea 71;

Saludos

PD: aún no está lista.
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #4 (permalink)  
Antiguo 30/08/2003, 19:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno ... creo que te vendría mejor usar el buffer de salida de PHP en lugar de aplicar tu eval() directamente.

http://cl.php.net/manual/en/ref.outcontrol.php

Así tendrias tu HTML generado en una variable .. y esa es la que haces el return $html;

Tienes unos ejemplos (en los comentarios de los usuarios) como este .. para hacer lo que supongo estás haciendo:

Código PHP:
$sf fopen($sourcefile"r");
$df fopen($destfile"w");

ob_start();
while( !
feof($sf) )
{
    
$line fgets($sf4096);
    
$eval "echo \"".addslashes($line)."\";";
    eval(
$eval);
    
$line ob_get_contents();
    
fputs($dfstripslashes($line));
}
ob_end_clean(); 
Sería bueno que viese el código de algún motor de templates .. Fijate en el código que usa NokTemplate .. se trata de usar expresiones regulares aplicadas a la template que lees .. Usar "eval()" no creo que sea lo más óptimo para un motor de templates ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 30/08/2003, 19:57
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 21 años, 5 meses
Puntos: 1
en realidad el codigo de NOk lo he estudiado y lo que hace es por medio de expresiones regulares reemplazar el contenido de las variables de template, pero para mostrar luego el resultado del template hace un echo $h->imprimir($clave) no?.

el problema lo puedo solucionar asi como dices pero me idea era no tener la necesidad de hacer un echo del objeto.


En fin la clase queda asi
ahora solo me falta hacer los metodos para los bloques

Gracias y saludos.
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon

Última edición por MSDark; 30/08/2003 a las 20:16
  #6 (permalink)  
Antiguo 30/08/2003, 20:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Y.. quien ha dicho de hace un "echo" ...

Justamente las NokTemplate tiene un método anterior al de imprimir() .. que justametne es el que llama ese método que se lo llama exportar() ...

Fijate:
function imprimir($variable) {
print $this->exportar($variable);
}

Así que si quieres hacer el "echo" (print es lo mismo) .. pues lo haces .. y si quieres el código HTML generado por tu motor de templates .. por ejemplo para enviarlo por e-mail .. u otras cosas .. llamas al método exportar() simplemente (y no usarias el imprimir .. que hace el "echo" ..)

Pero, en un motor de templates .. debes hacer ese método que haga el "echo" y tener el método "exportar" para que cada cual use lo que necesite .. Es "más" claro leer código y ver un "imprimir" que se entiende que eso es para "mostrar" el resultado de tu template "parseado" .. que el de tener que explicar que tienen que hacer un echo $MSDarkTemplate->nose() .. (bueno es mi opinión .. )

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 30/08/2003, 20:18
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 21 años, 5 meses
Puntos: 1
ok, lo entiendo claramente.

Pero tambien me entiendo yo, en realidad el motor de templates que me stoy haciendo es para mí y en realidad básico. y debo reconocer q al menos para mi el mejor es el de Nok

Gracias.
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
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




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