2011-05-23 15 views
1

PHPコードを文字列で実行できるかどうかを知りたいです。私が持っているなら、私は意味します:文字列にphpコードを指定して実行する

$string = If i say <?php echo 'lala';?> I wanna get "<?php echo 'dada'; ?>"; 

どのように知っていますか?

[編集]誰も理解していないようです。

$string = If i say <?php count(array('lala'));?> 

のような文字列をデータベースに保存してからレンダリングする必要があります。私はこの問題は、私はあなたがeval()機能を使用することができ

I say "<?php echo 'dada'; ?>" 
+3

質問を明確にしてください。ここの文字列の値は何ですか?だから、指定された文字列が有効なPHPコードであるかどうかを識別できるようにしたいのですか?あなたは正規表現でこれを行うことはできません。 –

+2

ソースによって異なります。それがユーザーの入力であれば、本当に 'eval()'を勧められません。なぜなら、暗い人の魂は、永遠に私を拷問するために、netherworldの深みから来るからです。また、気をつけなければ悪用されるかもしれません。 –

+0

タグの中に ''タグを使用することはできません – Hubro

答えて

-1

のように「」(引用符)にPHPコードをreconizeないということである

function render_php($string){ 
    ob_start(); 
    eval('?>' . $string); 
    $string = ob_get_contents(); 
    ob_end_clean(); 
    return $string; 
} 

を使用してそれを行うことができます。

+1

特に、問題の文字列が*任意の*入力のユーザー入力から派生している場合は特にそうではありません。 :-) –

+0

はい。あなたはevalを使用して慎重にveeeeryする必要があります。 – fiunchinho

+0

編集内容をご覧ください。 –

1

連結しようとしているようです。連結演算子 "を使用します。

$string = "if i say " . $lala . " I wanna get " . $dada; 

か、私はあなたの文字列がPHPの変数になりそうだので、得るものです

$string = "if i say {$lala} I wanna get {$dada}."; 

EDIT:あなたはそれらの括弧内のコードはPHPとして解釈されるべきであることをPHPインタプリタを伝えたいとき <?php ?>が使用されています。これらのPHPブラケットの中で作業する場合、それらを再度含める必要はありません。したがって、これを行うだけです:

文字列が作成され、getMyNameFunction()の結果が追加されます。あなたのページの上部にあるの$のmyString変数を宣言して、後であなたがこれを行うと、それを使用したい場合は今:

<span id="myString"><?php echo $myString; ?></span> 

これは、タグ間の$のmyString変数の内容を追加するために通訳を言うだろう。

+0

これは一例です。実際、私は<?php echo implode($ lalala)のようなものを使いたいと思っています。 ?>またはそのようなもの –

+0

Jose:編集を参照してください。 – John

+0

編集内容をご覧ください。 –

2
$string = ($test === TRUE) ? 'lala' : 'falala'; 

(私はあなたが正しく書いたものを読んでいる場合)あなたがしようとしているように見える何をする方法はたくさんあります。上記は三項である。条件がtrueの場合、$ stringは 'lala'に設定され、それ以外の場合は 'falala'に設定されます。

あなたが書いたことを文字通り尋ねる場合は、eval()関数を使用します。渡された文字列を受け取り、それがPHPコードであるかのように実行します。 <?php ?>タグは含めないでください。

function dropAllTables() { 
    // drop all tables in db 
} 

$string = 'dropAllTables();'; 

eval($string); // will execute the dropAllTables() function 

[編集]

あなたはすべてのPHPコードを検索するには、次の正規表現を使用することができます。

preg_match_all('/(<\?php)(.+?)(\?>)/', $string, $php_code, PREG_OFFSET_CAPTURE); 

の$ php_codeは、$ php_codeは、[0]を返します配列となりますコード+ <?php ?>タグのすべての一致の配列。$ php_code [2]は、実行するコードだけの配列になります。

ので、

$string = "array has <?php count(array('lala')); ?> 1 member <?php count(array('falala')); ?>"; 
preg_match_all('/(<\?php)(.+?)(\?>)/', $string, $php_code, PREG_OFFSET_CAPTURE); 
echo $php_code[0][0][0]; // <?php count(array('lala')); ?> 
echo $php_code[2][0][0]; // count(array('lala')); 

これは、あなたが何をしたいのための助けになるはずです。

+0

編集内容をご覧ください。 –

0

文字列にtoken_get_all()を使用してから、T_OPEN_TAGトークンを探してそこからコピーを開始し、T_CLOSE_TAGトークンを探してそこで停止します。 T_OPEN_TAGの隣のトークンとT_CLOSE_TAGの直前のトークンまでの文字列は、あなたのPHPコードです。

これは高速であり、PHPのトークナイザを使用して文字列を解析するため、失敗しません。たとえ文字列に、?>などのコメントやその他の文字列が含まれていたり、正規表現や手書きの、遅い、純粋なPHPパーサを混乱させる他の関連部分文字列が含まれていても、文字列の中に常にPHPコードのビットがあります。

0

PHPコードブロックをデータベースに格納せず、evalを使用して評価することを検討します。通常、より良い解決策があります。 Design Pattern、OOP、Polymorphismについて読む。

関連する問題