2011-12-12 50 views
9

Estoy diseñando mi propio patrón MVC para facilitar el proceso de creación de páginas principales. Mi sistema de plantillas necesita mi clase de controlador para generar mis vistas. Esto significa que tengo que generar el archivo a través de una función php. He estado buscando desde hace un tiempo y parece que no puedo encontrar una solución.Cómo ejecutar el código php desde file_get_contents o archivo en una función

¿Cómo puedo, a través de una función PHP, ejecutar una cadena que representa algún código fuente ("<?", "<? Php", "?>" Y así sucesivamente) como php? Eval no tomaría mi <? signos (y yo leí esa función es una mierda por alguna razón).

Respuesta

2

Simplemente incluir() el archivo en su lugar debería estar bien. No he profundizado en el código fuente, pero estoy bastante seguro de que Zend Framework implementa las plantillas.

0

Bueno, eval no es basura per se, es sólo fácil de crear un agujero de seguridad con que si No tenga cuidado con lo que permite dentro de esa evaluación (eso, y tal vez el hecho de que puede ser malo para la legibilidad del código).

En cuanto a los signos <?, eso es porque eval espera el código php, por lo que si desea mezclar php con salida simple, incluya solo la etiqueta de cierre ?>.

En general, sin embargo, puede implementar plantillas de mejor manera, intente buscar en el búfer de salida.

3

Reemplazando "echo file_get_contents()" con "include()" como sugirió GordonM funcionó exactamente como fuera necesario. Todavía no puedo votar porque soy demasiado nuevo, pero para mis necesidades esta es la respuesta directa a la pregunta principal.

1
$code = '<?php 
function GetBetween($content, $start, $end) { 
    $r = explode($start, $content); 
    if (isset($r[1])){ 
    $r = explode($end, $r[1]); 
    return $r[0]; 
    } 
    return ''; 
}'; 

function _readphp_eval($code) { 
    ob_start(); 
    print eval('?>'. $code); 
    $output = ob_get_contents(); 
    ob_end_clean(); 
    return $output; 
} 

print _readphp_eval($code); 
Cuestiones relacionadas