- ベストアンサー
外部ファイル記述内容をヒアドキュメント上で実行
- 外部のテキストファイルを読み込み、PHPスクリプトが記述されていたら実行する方法について解説します。
- テキストファイルにはテストの文章やPHPコードを記述することができます。
- PHPコードを実行する際には、file_get_contents()関数やexplode()関数を使用してテキストファイルの内容を取得し、適切に処理する必要があります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
セキュリティ上、外部ファイルの中のプログラムを実行するのはよくないので、 <?php echo (date("Y年m月d日")); ?> と書いておくのではなく [[TODAY]] とか書いておいて置換処理するのが一般的かと思います。 一応 eval() と言うのがありますので実行可能ですが、PHPの開始タグ・終了タグは抜かなければいけないので、外部ファイルの記述を変える必要があります。
その他の回答 (2)
- superside0
- ベストアンサー率64% (461/714)
#1の御回答のように外部ファイルの信頼性がないと 怖いですし 読んだ後にキーを置換するほうが、見通しもよいとは思いますが、 PHPの出力をバッファリングして 変数に格納してしまうということは可能ではあります。 $text = file_get_contents("text.txt"); のかわりに ob_start(); include("text.txt"); $text = ob_get_contents(); ob_end_clean(); って感じです。
お礼
ありがとうございます。 とりあえず別の方法でできました。 信頼性は不安ですが、外部ファイルとはいえ、自分のアップロードしたファイルのみ読み込みで、不特定多数のファイルを読み込ませるわけではないです。 ご教示いただいたコードは今後の参考にさせて頂きます。
- pringlez
- ベストアンサー率36% (598/1630)
そんなコード、外部ファイル云々の前にこう書いたって動きませんよ。 <?php echo <<<EOD <p>テスト<br>これはテストです。 <?php echo (date("Y年m月d日")); ?></p> <p>テスト2<br>これはテストです2</p> EOD; ?> 本質的に何がしたいのかよくわかりませんが、「外部ファイルを読み込みそれを実行」でいいのならincludeするのが普通でしょう。 データを読んで取り込みたいのなら、データファイルに日付を出力すべきです。データファイルにPHPのコードを書くなんてありえないと思います。
お礼
ありがとうございます。 evalが参考になりました。 下記の記述で思っていたのが、実現しました。 <?php $text = <<<EOM テスト,これはテストです。 <?php echo (date("Y年m月d日")); ?> テスト2,これはテストです2 EOM; $text = explode("\n", $text); $num0 = explode(',', $text[0]); $num1 = explode(',', $text[1]); $subject0 = $num0[0]; $subject1 = $num1[0]; $body0 = $num0[1]; $body1 = $num1[1]; echo eval("?>".<<<EOM <p>{$subject0}<br>{$body0}</p> <p>{$subject1}<br>{$body1}</p> EOM ); ?> 実現できたのでベストアンサーとさせて頂きます。