人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPで "「こんにちは、世界」を英語で言うと「<?php echo 'hello world!' ?>」です。" を文字列として読み込み、「'hello world!'」を出力することは可能でしょうか?
HTMLテンプレートを読み込んで出力するシステムをPHP5で作ったのですが、テンプレート内にもPHPコードを埋め込みたいと言う要望をクライアントから出されてどう実現すればいいのかわからずに困っています;


●質問者: jazzmine
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Hello world HTML PHP こんにちは クライアント
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● きゃづみぃ
●5ポイント

いったん ???.phpのファイルを作成して、それを実行するようにしたらいかがでしょうか?

◎質問者からの返答

ありがとうございます。

そのような処理を考えているのですが、効率的な処理の流れを思い浮かべずに困っています。


2 ● kn1967
●5ポイント
<?php echo "'hello world!'" ?>

上記のようにダブルクォーテーションで囲んでもらえば出来るはずですが

この程度の超初心者的な事であればphpでシステムを作って商売になさっておられる方が

相談にこられるとも思いませんので、もっともっと深い部分で躓いておられるのだと思いますが

どのようなシステムで、どのようなテンプレートをお使いになっていて、

ハローワールドの記述はどこで行っていてなどなど、システムについて具体的に書けませんか?

◎質問者からの返答

ありがとうございます。

説明不足で恐れ入ります。

下記、MookさんのようなテンプレートをPHPが読み込む際にPHP箇所を

処理させるロジックを考えていました。


3 ● Mook
●60ポイント ベストアンサー

だいたいどの言語も同じような仕様を持っていますが、PHPで文字列をコードとして実行するのは、

eval()になります。


たとえばテンプレートファイルを

sample.tmp

<html>
<head>
</head>
<body>
_PHP for( $i=0 ; $i<10 ; $i++ ) echo "Hello World\n<BR>";
</body>
</html>

としておいて、

<?php
 $handle = @fopen("sample.tmp", "r");
 if ($handle) {
 while (!feof($handle)) {
 $buffer = fgets($handle, 4096);
 if( substr( $buffer, 0, 4 ) == "_PHP" ) {
 eval( substr( $buffer, 4, -1 ) );
 } else {
 echo $buffer;
 }
 }
 fclose($handle);
 }
?>

とすれば、テンプレート内で _PHP で始まる行をコードとして処理します。

この結果は"Hello World" が十回画面に表示されます。

◎質問者からの返答

ありがとうございます。

eval(); は知りませんでした。大変助かりました。

また、下記コメント欄にもあるようにセキュリティ面の忠告も

ありがとうございます。テンプレートはクライアントのみが

修正するのですが、充分気をつけていただくよう伝えておきます。


4 ● pahoo
●30ポイント

こんな感じでどうでしょうか。

スクリプトは $instr に入れるとします。複数行にも対応しています。

<?php
$instr =<<< EOT
<?php echo 'hello world!'; ?>
EOT;

preg_match("/<\?(php)?(.*)\?>/ms", $instr, $arr);
$e = isset($arr[2]) ? $arr[2] : '';
eval($e);
?>

ただし、evalでエラーが発生したとき(入力したスクリプトが間違っているとき)の処理をしていません。

これに関連しますが、クロスサイトスクリプティング攻撃を受ける可能性が高いプログラムですので、実装に当たっては十分にご注意ください。

◎質問者からの返答

ありがとうございます。

実際はもっと複雑な処理になるのですが、スクリプトが

間違っている場合の対応はなかなか厳しいですね。

また、クライアントが埋め込んだコードに脆弱性があるかもしれないので

その辺も充分注意してもらうよう伝えておきます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ