外部ファイル記述内容をヒアドキュメント上で実行

このQ&Aのポイント
  • 外部のテキストファイルを読み込み、PHPスクリプトが記述されていたら実行する方法について解説します。
  • テキストファイルにはテストの文章やPHPコードを記述することができます。
  • PHPコードを実行する際には、file_get_contents()関数やexplode()関数を使用してテキストファイルの内容を取得し、適切に処理する必要があります。
回答を見る
  • ベストアンサー

外部ファイル記述内容をヒアドキュメント上で実行

題名の通りなのですが、説明が難しいです.. 外部のテキストファイルを読み込み、もしPHPスクリプトが記述されていたら、それを実行させたいです。 例えば、下記のようなテキストファイルをディレクトリにアップし・・ (テキストファイルtext.txt内容) テスト,これはテストです。 <?php echo (date("Y年m月d日")); ?> テスト2,これはテストです2 下記のようなスクリプトがあったとして・・ (PHP実行ファイル内容) <?php $text = file_get_contents("text.txt"); $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 <<<EOD <p>{$subject0}<br>{$body0}</p> <p>{$subject1}<br>{$body1}</p> EOD; ?> 実行すると、出力は・・ (実行結果) <p>テスト<br>これはテストです。 <?php echo (date("Y年m月d日")); ?></p> <p>テスト2<br>これはテストです2</p> ・・というようになるかと思います。 ようは、<?php echo (date("Y年m月d日")); ?>がそのまま文字列として出力されるだけです。 これを、下記のような出力結果が得られるようにしたいです・・ (欲しい実行結果) <p>テスト<br>これはテストです。 2016年11月10日</p> <p>テスト2<br>これはテストです2</p> 何か方法はありますでしょうか? ご教示頂けましたら幸いです。

  • cnkozo
  • お礼率39% (158/402)
  • PHP
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5027/13124)
回答No.1

セキュリティ上、外部ファイルの中のプログラムを実行するのはよくないので、  <?php echo (date("Y年m月d日")); ?> と書いておくのではなく  [[TODAY]] とか書いておいて置換処理するのが一般的かと思います。 一応 eval() と言うのがありますので実行可能ですが、PHPの開始タグ・終了タグは抜かなければいけないので、外部ファイルの記述を変える必要があります。

cnkozo
質問者

お礼

ありがとうございます。 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 ); ?> 実現できたのでベストアンサーとさせて頂きます。

その他の回答 (2)

回答No.3

#1の御回答のように外部ファイルの信頼性がないと 怖いですし 読んだ後にキーを置換するほうが、見通しもよいとは思いますが、 PHPの出力をバッファリングして 変数に格納してしまうということは可能ではあります。 $text = file_get_contents("text.txt"); のかわりに ob_start(); include("text.txt"); $text = ob_get_contents(); ob_end_clean(); って感じです。

cnkozo
質問者

お礼

ありがとうございます。 とりあえず別の方法でできました。 信頼性は不安ですが、外部ファイルとはいえ、自分のアップロードしたファイルのみ読み込みで、不特定多数のファイルを読み込ませるわけではないです。 ご教示いただいたコードは今後の参考にさせて頂きます。

  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.2

そんなコード、外部ファイル云々の前にこう書いたって動きませんよ。 <?php echo <<<EOD <p>テスト<br>これはテストです。 <?php echo (date("Y年m月d日")); ?></p> <p>テスト2<br>これはテストです2</p> EOD; ?> 本質的に何がしたいのかよくわかりませんが、「外部ファイルを読み込みそれを実行」でいいのならincludeするのが普通でしょう。 データを読んで取り込みたいのなら、データファイルに日付を出力すべきです。データファイルにPHPのコードを書くなんてありえないと思います。

関連するQ&A

  • ファイル書き込みが重複する

    こんばんわです。 以下のスクリプトで 投稿データを時系列に新しい書込み順に表示させようとしているのですが、一度実行させると同じ投稿がいくつも表示されてしまうのです。ご回答お願いいたします。一部省略しています。 <?php if($name== "" or $body == ""){ echo '<font color = "#FF000">必須項目入力エラー</font><br>'; echo 'お名前と本文は必ず入力してください<br>'; echo '<a href = "javascript:history.back()">戻る</a>'; } $body = substr($body, 0, 1000); $body = str_replace("\r\n", "<br>", $body); $dt = date("y/m/d H:i:s"); $data = file("data.txt"); $file = fopen("data.txt", "w"); fwrite($file, "$name\t$mail\t$body\t$dt\n"); $i = 1; foreach ($data as $value) { if($i < 30) { fwrite($file, "$value"); $i++; } } fclose($file); } echo ' subject03-BBS <h1>subject-BBS</h1> <form method="post" action="subject03.php" > お名前 <input type="text" size="20" maxlength="40" name="NAME"> メール <input type="text" size="30" maxlength="60" name="MAIL"> <p>本文<br></p> <textarea rows="20" cols="80" wrap="soft" name="BODY"></textarea> <p><input type="submit" name="SUBMIT" value="送信"><p/> </form> '; $data = file("data.txt"); foreach($data as $value){ $view = explode("\t",$value); if($mail== ""){ echo "お名前:$name$view[3]<br>"; } else{ echo "お名前:<a href=\"mailto:$mail\">$name</a>$view[3]<br>";} echo "本文:$body<br>"; } ?>

    • ベストアンサー
    • PHP
  • ヒアドキュメントの中で別ファイルをインクルード

    PHPでヒアドキュメントの中で別ファイルをインクルードする方法はどのように処理するのでしょうか? sample.txt <p>サンプルテキストからの文字</p> ------------------------------------ sample.php $sample = <<<_EOM_ <html> <head> </head> <body> サンプルサンプル<br> *ここにsample.txt内のhtmlソースをインクルードしたい。 </body> </html> _EOM_; 以下省略(echoとかで出力)

    • 締切済み
    • PHP
  • ファイルに記憶できない。

    こんにちわお聞きしたいのですが、以下のスクリプトで、送信で引渡されたデータを先に記録し、再度ファイルから取出し表示したいのですが data.txtに書き込まれないです。サーバーに上げている、data.txtの の属性は書き込みにしています。 <?php $submit = $_post["submit"]; if($submit == "送信"){ $name = $_POST["NAME"]; $mail = $_POST["MAIL"]; $body = $_POST["BODY"]; if($name== "" or $body == ""){ echo '<font color = "#FF000">必須項目入力エラー</font><br>'; echo 'お名前と本文は必ず入力してください<br>'; echo '<a href = "javascript:history.back()">戻る</a>'; exit; } $body = str_replace("\r\n", "<br>", $body); $fp = fopen("data.txt","w"); fwrite($fp,"$name\t$mail\t$body\n"); fclose($fp); } echo ' subject03-BBS <h1>subject-BBS</h1> <form method="post" action="subject03.php" > お名前 <input type="text" size="20" maxlength="40" name="NAME"> メール <input type="text" size="30" maxlength="60" name="MAIL"> <p>本文<br></p> <textarea rows="20" cols="80" wrap="soft" name="BODY"></textarea> <p><input type="submit" name="SUBMIT" value="送信"><p/> </form> '; $data = file("data.txt"); foreach($data as $value){ $view = explode("\t".$value); $name = $view[0]; $mail = $view[1]; $body = $view[2]; if($mail== ""){ echo "お名前:$name<br>"; } else{ echo "お名前:<a href=\"mailto:$mail\">$name</a><br>";} echo "本文:$body<br>"; } ?> </body> </html>

    • ベストアンサー
    • PHP
  • 外部PHPファイルの読込みについて

    いつもお世話になります。 外部PHPファイルの読込みが、期待通りの動作をしません。 レンタルサーバ会社は、Aサーバ、Bサーバ 同じ。(条件同じ) allow_url_fopen は、defaultの ONです。 まずAサーバに、agent.phpをアップロード。agent.phpファイルの中身は、 <?php $agent =$agent = $_SERVER['HTTP_USER_AGENT']; ?> これを、Bサーバの、test.phpに読込み。test.phpの中身は、 <?php include("http://BサーバのURL/agent.php"); echo "<html><head><title>.....</title></head>\n"; echo "<body><p>UserAgent : " . $agent . "</p></body></html>\n"; ?> この場合、http://BサーバのURL/agent.phpを開いても、 UserAgent($agent)の値は出てきません。これは、どうしてでしょうか? 但し、Aサーバに、下記のPHPファイル(xyz.php)をアップロードして <?php echo "<p>あいうえお</p>\n"; ?> として、Bサーバのtest.phpの中身を <?php echo "<html><head><title>.....</title></head><body>\n"; include("http://BサーバのURL/xyz.php"); echo "</body></html>\n"; ?> として、test.phpを読み出すと、「あいうえお」と出力されます。 何故なのか、またどうしたら期待通り動作するのかを、教えて下さい。  よろしくお願いします。

    • ベストアンサー
    • PHP
  • HTML中のPHPが実行されない

    以下のソースをindex.htmlにしてWebサーバーに置いたのですが、ウェブでアクセスはできますが、PHPの実行がされないようです。 それとも、PHPの使い方のミスでしょうか。 <HTML> <TITLE>TEST</TITLE> <BODY> あいうえお<BR> <?include("count.php");?>のアクセスです。<BR> <?php echo $_SERVER["HTTP_USER_AGENT"];?><BR> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • 外部ファイルでクエリを実行したい

    「クエリを実行している間にローディング画像を表示する」という処理をしたいです。 外部ファイルの[load.php]内で「データベース接続→mysql_queryを実行する」という処理を 行い、[index.php]で結果を表示したいのですが、うまくいきません。 ※load.phpの中身をindex.php内に書いた場合は成功する ※load.phpの読み込み自体はできている。 [index.php] <script type="text/javascript"> $(function(){ $("#sample").load("load.php"); }) </script> <div id=sample> <div id="loader"><img src="edit/img/loader.gif" width="24" height="24" alt="Loading..." /></div> <?php echo $num; ?> </div> [load.php] <?php $conn = mysql_connect("localhost","DB","pass",true); mysql_query("SET NAMES utf8") or die("can not SET NAMES utf8"); mysql_select_db('DB',$conn); $sql = "SELECT ~" $result = mysql_query($sql) or die(mysql_error()); $num = mysql_num_rows($result); ?>

    • ベストアンサー
    • PHP
  • PHP入りのHTMLファイルの属性について

    PHPを使えるレンタルサーバーを試しているのですが、PHPを内包しているHTMLをアップして動作させようとすると、そのファイルに実行権がないとき「Internal Server Error」となってしまいます。 以前に使っていたレンタルサーバーでは実行権なんか必要なかった筈です。 全てのPHPに実行権をつければ済む話ではありますが、数が多いと面倒です。 実行権なしに動作させる方法はありませんか? php.ini や .htaccess の設定でなんとかなりませんでしょうか? 例えばこのファイル--------------------------- <html> <head> <META http-equiv="Content-Type" content="text/html; charset=euc-jp"> </head> <body> <script language="php"> echo date('Y/m/d H:i:s'); echo "<BR>"; </script> </body> </html> ここまで---------------------------

    • ベストアンサー
    • PHP
  • 入力フォームとファイル添付を同時に実行したい。

    PHPもhtmlもはじめたばかりの超初心者です。 入力フォームの文字と添付ファイルを同時にPOSTしたいの ですがjavascriptを使わないと無理でしょうか? ******************************** <html> <head> <title>TESTフォーム</title> </head> <body> <form action="test.php" method="post"> 名前:<br> <input type="text" name="name" size="30" value=""><br> <P> &nbsp;&nbsp;&nbsp;ジャンル:<br>  <input type="radio" name="bunrui" value="abc">あ  <input type="radio" name="bunrui" value="bbb">い  <input type="radio" name="bunrui" value="sss">う </P> &nbsp;&nbsp;&nbsp;内容:<br> <textarea name="comment" cols="50" rows="5"></textarea><br> <P> 添付:<input type="file" name="file1"> <P> <input type="submit" value="投稿する"> </form> </body> </html> ******************************** 添付の部分をどうやってtest.phpに渡せばよいかわかりません。 <form action="test2.php" method="post"> 添付:<input type="file" name="file1"> と付け加えても無駄というところまでは調べております。 個別に書いたphpで添付したファイルをsambaサーバーに保存 、入力フォームをtxtにしてsambaへ保存するところまではできました。 ただ同時実行だとどう書けばよいか悩んでおります。 こういうレベルは質問してはいけないんですかねえ・・・ どなたか教えていただけると幸いです。

  • 外部ファイルを読み込んで表示

    これが外部ファイル(CheckUtil.js)です。 //入力データ(テキストデータやテキストエリア)の必須チェック function requiredCheck(strVal,strErr) { if(strVal=="" || strVal==undefined){ return strErr + "は必須入力です \r"; }else{ return ""; } } これを読み込んで表示させたいです。 <HTML> <HEAD> <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=sjis"> <TITLE>ファイル操作</TITLE> <!-- {literal} --> <script language="JavaScript" src="CheckUtil.js"></script> <script language="JavaScript"> </HEAD> <BODY> <!-- function chk(part){ strErr = ""; strErr+ = requiredCheck(part.value,"なまえ"); if(strErr == ""){ return true; }else{ window.alert(strErr); return false; } } //--> </script> <!-- {/literal} --> <BR> <FORM ACTION="<?php echo $PHP_SELF; ?>" METHOD="POST" name="fm" onsubmit="return chk()> <INPUT TYPE="text" NAME="name" SIZE="40"><BR> <INPUT TYPE="text" NAME="comment" SIZE="40"><BR><BR> <INPUT TYPE="submit" NAME="submit" VALUE="ボタン" onsubmit="return chk()"><BR> </FORM> <BR><BR> </CENTER> </BODY> </HTML>

  • PHP重複ファイルに連番をつけてアップロードしたい

    ファイルをアップロードするページをPHPで作りました。 testup.htmlでファイルを選択し、 testup.phpでファイルをサーバーにアップする 簡単な仕組みです。 アップロードには成功したのですが、 同じファイル名のデータがある場合、上書きされてしまいます。 上書きされずに、連番等をファイル名に追加してアップロード できればと思いましたが、方法がわかりません。 当方PHPの初心者です。何卒お力をお貸しください。 よろしくお願い致します。 ソースを記入しておきます。 「testup.html」 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>test</title> </head> <body> テストアップローダー<br> <form action="testup.php" method="post" enctype="multipart/form-data"> アップロードするファイルを選択してください。 <br> <input type="file" name="upfile" size="30"><br> <br> <input type="submit" value="アップロード"> <label>  <input type="reset" name="button" id="button" value="リセット" /> </label> </form> </body> </html> 「testup.php」 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>test</title> </head> <body> <p><?php if (is_uploaded_file($_FILES["upfile"]["tmp_name"])) { if (move_uploaded_file($_FILES["upfile"]["tmp_name"], "files/" . $_FILES["upfile"]["name"])) { chmod("files/" . $_FILES["upfile"]["name"], 0777); echo $_FILES["upfile"]["name"] . "をアップロードしました。"; echo "<br><br>ありがとうございました。"; echo "<br><FORM><INPUT TYPE=button value=閉じる onClick=window.close()></FORM>"; } else { echo "ファイルをアップロードできません。"; echo "<br>お手数ですが前の画面に戻ってもう一度ファイルをアップロードしてください。"; echo "<br><FORM><INPUT TYPE=button value=前のページに戻る onClick=JavaScript:history.back()></FORM>"; } } else { echo "ファイルが選択されていません。"; echo "<br>お手数ですが前の画面に戻ってファイルを選択してください。"; echo "<br><FORM><INPUT TYPE=button value=前のページに戻る onClick=JavaScript:history.back()></FORM>"; } ?></p> </body> </html>

    • ベストアンサー
    • PHP

専門家に質問してみよう