2011-12-12 8 views
9

Sto progettando il mio pattern MVC per semplificare il processo di creazione delle home page. Il mio sistema di template ha bisogno della mia classe controller per generare le mie viste. Ciò significa che devo emettere il file attraverso una funzione php. Ho cercato un po 'di tempo e non riesco a trovare una soluzione.Come eseguire il codice php da file_get_contents o file in una funzione

Come posso, tramite una funzione PHP, eseguire una stringa che rappresenta un codice sorgente ("<?", "<? Php", "?>" E così via) come php? Eval non prenderebbe il mio <? Segni (e ho letto che la funzione è una schifezza per qualche motivo).

risposta

2

Basta includere() il file invece dovrebbe andare bene. Non ho approfondito il codice sorgente, ma sono abbastanza sicuro che è così che Zend Framework implementa i template.

0

Beh, eval non è una schifezza di per sé, è solo facile creare un buco di sicurezza con che se si Non stai attento a ciò che permetti all'interno di quell'eval (che, e forse il fatto che possa essere negativo per la leggibilità del codice).

Per quanto riguarda i segni <?, è perché eval si aspetta codice php, quindi se si wan't mescolare php con uscita pianura, includono solo il tag di chiusura ?>.

In generale, tuttavia, è possibile implementare modelli in modo migliore, provare a esaminare il buffer di output.

3

Sostituire "echo file_get_contents()" con "include()" come suggerito da GordonM ha funzionato esattamente come necessario. non posso ancora rinunciare visto che sono troppo nuovo, ma per le mie esigenze questa è la risposta diretta alla domanda principale.

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); 
Problemi correlati