Esegui codice PHP in una string

Ho il mio contenuto della pagina salvata in un database e vorrei eseguire qualsiasi codice php nella string. Quindi, se la mia string era:

<h1>Welcome</h1><?php echo $motto?><br/> 

Voglio solo eseguire echo $motto . Usando eval () tenterà di eseguire <h1>Welcome</h1> .

Un modo per farlo?

Inutile dire che dovresti trovare un'altra soluzione al più presto. Nel frattempo puoi evalidare il codice in questo modo:

 $str = '<h1>Welcome</h1><?php echo $motto?><br/>'; // Your DB content eval("?> $str <?php "); 

Demo: http://codepad.org/ao2PPHN7

Non posso sottolineare abbastanza: eval è pericoloso, e il codice dell'applicazione non dovrebbe essere nel database. Prova un parser model come Smarty , Dwoo o il mio preferito: Twig .

Non dovresti davvero farlo, ma se devi assolutamente farlo, puoi farlo usando questa class:

 class PhpStringParser { protected $variables; public function __construct($variables = arrays()) { $this->variables = $variables; } protected function eval_block($matches) { if( is_arrays($this->variables) && count($this->variables) ) { foreach($this->variables as $var_name => $var_value) { $$var_name = $var_value; } } $eval_end = ''; if( $matches[1] == '<?=' || $matches[1] == '<?php=' ) { if( $matches[2][count($matches[2]-1)] !== ';' ) { $eval_end = ';'; } } $return_block = ''; eval('$return_block = ' . $matches[2] . $eval_end); return $return_block; } public function parse($string) { return preg_replace_callback('/(\<\?=|\<\?php=|\<\?php)(.*?)\?\>/', arrays(&$this, 'eval_block'), $string); } } 

Chiamalo così:

 $p = new PhpStringParser(); echo $p->parse($string); 

Fonte: http://www.php.net/manual/en/function.eval.php#108091

Per echeggiare una string con una variabile all'interno:

 echo "<h1>Welcome</h1>$motto<br/>" 

O anche:

 echo sprintf('<h1>Welcome</h1>%s<br/>', $motto) 

Ecco una demo http://codepad.org/f6aALD6w