PHPプログラミングで外部ファイルのHTMLを表示させる方法と定数の表示

このQ&Aのポイント
  • PHPプログラミングで外部ファイルに記載したHTMLを表示させる方法と、変数や定数を{}で表示する方法を解説します。
  • 外部HTMLファイルには{$変数}という形式で変数を埋め込むことができ、PHPプログラム内でファイルを読み込んで表示させることができます。
  • また、定数の表示や文字列の結合も可能であり、クラスファイルを用いて定数を定義し、外部ファイルに表示させることもできます。
回答を見る
  • ベストアンサー

phpのプログラミングについての質問です。

外部ファイルにテンプレートと言うか、データとしてHTMLの書かれたファイルを置くとします。 そして、メインのphpのファイルで変数や定数の処理をさせて、その外部HTMLファイルを読み込ませ、HTML内に記載した変数等を表示させるとします。 // tmp.html // <html> <body> <div> <p>こんにちは{$php}です。<br> 今日は{ConstTest::CONST_TEST}ですね。</p> <p>どうも。{$aisatsu.$php2}です。<br> 今日は{$tenki[1]}なので、悪い天気ですよ。</p> </div> </body> </html> // tmp.html ここまで // 上記のような{$変数}と言う、{ と } で囲った書き方のプログラムを良く見かけるのですが、 phpプログラム内で、どう処理させれば、表示できるのでしょうか? また、上には書きましたが、下記のように定数のクラスファイルも外部に作って、表示させることは可能でしょうか? そもそも、定数も{}で表示させることは可能なんでしょうか? もうひとつ、{$a.$b}の様に文字列の入った変数をドットでつなげると言う書き方も可能でしょうか? // main.php // <?php require_once('./class.php'); $php = 'アマガエル'; $aisatsu = 'こんにちわ。'; $php2 = '椎名アップル'; $tenki = array('晴れ','雨','曇り'); // 処理の仕方が解からないので、デタラメな?の部分です $hoge = file_get_contents('./tmp.html'); echo $hoge; // ?の部分終わり exit; ?> // main.php ここまで // // class.php // <?php class ConstTest { const CONST_TEST = '雨ですが、良い天気'; } ?> // class.php ここまで //

  • PHP
  • 回答数3
  • ありがとう数1

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

「テンプレートをどう処理するか」はスクリプトをどう書くかだけの問題です。 どういう変数があるかが既知であればひとつひとつstr_replaceで置換するという方法もないわけではありません。この場合は変数の書き方もある程度自由です(スクリプトで置換できればいいので)。 $tpl = file_get_contents('contents.tpl'); $tpl = str_replace('{$abc}', $abc, $tpl); #もちろん実際には配列+可変変数などで効率よく #回すでしょうけど、あくまでも「例」として(汗 また、evalを使ってヒアドキュメントとして扱う(変数はphpによってparseされる)という手法もあります。 $tpl = file_get_contents('contents.tpl'); $tpl = "echo <<<TPL\r\n" . $tpl . "\r\nTPL;\r\n"; eval($tpl); どういう書き方が出来るかは、処理方法によって異なってきます。

tncbby
質問者

お礼

わかりやすい解答ありがとうございました。

その他の回答 (2)

回答No.3

そんな物自前で作らずにSmartyあたりのテンプレートエンジンでも使っておけよ。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

関連するQ&A

  • phpの結果をjavaスクリプトタグで表示したい

    phpの変数を含んだ処理結果をHTMLに埋めこんだjavaスクリプトタグで表示したいです。 php側のプログラム <?php header("Content-type: application/x-javascript"); $a = array('abc', 'def', 'ghi'); rsort($a); foreach ($a as $tmp) { echo "document.write(\"<P>$tmp</P><br>\")"; } ?> 表示側のHTML <html> <body> <script type="text/javascript" src="http://www.aaa.com/hoge.php"></script> </body> </html> echo "document.write(\"<P>$tmp</P><br>\")"; の箇所が変数でなければ、記入した文字が表示されます。。 例: echo "document.write(\"あああ\")"; 変数に対応した書き方でないと思いますが、、、アドバイスいただけないでしょうか? よろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHPファイルをincludeしてHTML表示する

    お世話になります。 PHP含めプログラム初心者の者です。 どうか知恵をお貸しください。 現在制作しているHTMLサイトがあります。レイアウトはCSSです。 そのうちのひとつのコンテンツのブログページをサイト内WordPressで更新できるようにしたいと考えています。本来なら全てのページをWordPress化したほうがいいのでしょうが、新たにまたいろいろ記述する時間がないもので、とりあえずはblog.htmlなページのコンテンツ表示領域にWordPressで作ったindex.phpが表示されたらいいなと考えております。 ネットでいろいろ調べた結果、「phpファイルをincludeする」という方法によって、それをhtmlファイルで表示する方法があるようです。そこで質問なのですが、具体的にどのようにソースを記述すればそれは可能になるのでしょうか。 (1).htaccessに「AddType application/x-httpd-php .html」と記述する。 (2)表示したいHTML部分に「include(dirname(__FILE__).'/index.php');」と記述する。 とありましたがそれだけではできませんでした。具体的にそうしればいいか教えていただけないでしょうか。(htmlの拡張子をshtmlにするとかいう情報もありましたが定かではありません。)PHPに関しては本当に初心者な者で、変な質問をしているかもしれませんがどうかよろしくお願い致します。 ※参考にした情報ソースは下記です。 http://www.yusk.org/memo/php-memo/php_include_001.html ※HTMLソースは下記です。 <body> <div id="header"> ~略~ </div> <div id="contens"> <div id="leftmenu"> ~略~ </div> <div id="rightmenu"> <div id="rightbox-inside"> <div id="rightbox-inside-txt"> <p class="title">BLOG</p> <p class="standard"> include(dirname(__FILE__).'/index.php');(←ここにブログを表示させたい) </p> </div> <div style="clear:both;"></div> <div id="rightbox-buttom"> </div> </div> </div> </div> <div id="footer"> ~略~ </div>

    • ベストアンサー
    • PHP
  • PHPでHTMLの中から <div>~</div> を取り出したい

    PHP 4.4.2 を使っています。 HTMLの中の <div class="main">~</div> で囲まれているテキストを取り出したいのですが、どのようにするのが良いでしょうか。 ファイルの先頭から順番に調べていくことも検討しましたが、<div>は入れ子になる可能性もあるので、それを考えたらわからなくなりました。

    • ベストアンサー
    • PHP
  • PHPの高速化

    HTMLとphpがごちゃごちゃになるとややこしいので $HTML .= "<div>hogehoge</div>" のような、HTMLソースコードをすべて、いったん変数に格納し、最終的に echo $HTML; とする手法で、作成していったのですが、 HTMLを変数に埋め込んだせいか、PHPの処理が完全に終わるまで HTMLが表示されなくなってしまい、 表示に時間がかかるようになってしまいました。 待ち時間を感じさせぬよう、HTMLを先に表示させ、 そのあとで、データベースに接続や、繰り返し処理のデータを 表示させるには、現在のすべてのHTMLソースを変数に入れるという 設計を改めるしかないのでしょうか。 または、別の方法で、 HTML記述部分を優先的に処理させる方法はないでしょうか。

    • ベストアンサー
    • PHP
  • javascriptのPHP化について

    宜しくお願い致します。 javascriptの外部ファイルをPHP化して、サーバサイドで動的に生成した内容を吐き出し、それをHTML側でjavascriptの外部ファイルとして受け取って処理しております。 この場合のブラウザがアクセスした際に処理される順番は・・・ (1)HTMLの読み込み開始 (2)header内のjavascript外部ファイルの読み込みと実行 (3)HTMLファイルのbody以下を読み込み (4)結果をブラウザに返して表示 という流れになるはずです。 この場合、(2)のjavascript外部ファイルの方がbodyより先に実行されるはずです。 しかし、javascript外部ファイル内のPHPでセッションデータを扱っている場合、(3)のbody内でPHPでセッションを定義した内容が、なぜか(2)のjavascript外部ファイルで反映されて実行されるのです。 私のイメージでは・・・ (1)HTMLの読み込み開始 (2)header内のjavascript外部ファイルの読み込みと実行  ※この時セッションは反映しない (3)HTMLファイルのbody以下を読み込み  ※この時にセッションを入れても(2)が既に実行さられているので反映しない (4)結果をブラウザに返して表示  ※結果、セッションにデータが入っておらず、php側でエラーを吐き出しjavascriptが止まる という様になるかと思ってましたが、なぜか実行されます。 javascriptはHTMLが全部読み込まれてから実行されるのでしょうか?

  • class指定したHTML要素の背景色を変えるには

    HTML文書中で,class指定した要素の背景色を変更するには,どのようにしたら良いのでしょうか。 例: <div id="HOGE"> <p class="hoge"> Hellow! </p> </div> id指定の要素に対しては, document.getElementById('HOGE').style.backgroundColor="red"; として成功しましたが,class="hoge"に対してはどのように指定すれば良いのかわかりません。 よろしくお願いします。

  • PHPでHTMLを分解してMySQLに登録

    パターン化されているHTMLソースをDBに登録したい。 環境 PHP:5.1.6 MySQL:5.0.77 下記のようなHTMLソースがあります。このソースを区切ってMySQLに登録したいと思います。 テーブル名:sample (2列構成) フィールド名:id(auto_increment),text -----HTMLソース----------------------------------------- <p> <div class="sample_title">サンプルタイトルA</div> <div class="item">サンプルアイテムA-1</div> <div class="item">サンプルアイテムA-2</div> <p> <div class="sample_title">サンプルタイトルB</div> <div class="item">サンプルアイテムB-1</div> <div class="item">サンプルアイテムB-2</div> 以下同様のデータが続く・・・100~500個程度。 -------------------------------------------------------- HTMLソースに</p>の終了タグはありません。 正規表現等で<p>から、次の<p>までのソースを取り出しを繰り返せば良いと思いますが、どのようにプログラムを作ればよいかわかりません。 求める結果は上記テーブルの 1番目のtextフィールドに <p> <div class="sample_title">サンプルタイトルA</div> <div class="item">サンプルアイテムA-1</div> <div class="item">サンプルアイテムA-2</div> 2番目のtextフィールドに <p> <div class="sample_title">サンプルタイトルB</div> <div class="item">サンプルアイテムB-1</div> <div class="item">サンプルアイテムB-2</div> という値が入っていることです。 流れとしては下記のようになると思いますが、 どのようなプログラムを書けばよいのでしょうか? <p>から次の<p>を正規表現で取り出し。 MySQLに登録。 これをソースが終わるまで繰り返す。 ご回答よろしくお願い致します。

    • ベストアンサー
    • PHP
  • phpで外部ファイルを取り込み変数にセットしたいです。

    phpで外部ファイルを取り込み変数にセットしたいです。 いつもお世話になっております。 外部ファイル(data.ini)を作ってphpで読み込み変数にセットして ブラウザに表示したいのですが外部ファイルを読み込む方法が わかりません。 外部ファイルの中身は 変数A=1 変数B=2 という変数が保存されています。 これを読み込んでphp側で取得、表示したいのですが 可能でしょうか?ご教示お願いします。

    • ベストアンサー
    • PHP
  • jQuery 1つの要素を複数箇所に表示したい

    いつもこちらでお世話になっています。 jQuery初心者です。 また、お知恵を拝借したく、お願いします。 以下のようなHTMLがあります。 やりたい事は <div class="info">の中の要素全て(ul以下)を <div class="hoge">の中にも表示したいのです。 ですが、以下のスクリプトのように書くと、 今度は、<div class="info">の中の要素が表示されなくなり、 <div class="hoge">の中に表示されました。 <div class="info">の中の要素は 表示のままで、重複して<div class="hoge">の中に 表示させる方法ってありますか? ▼HTML ------------------- <div class="hoge"></div> ~別要素(省略)~ <div class="info">  <ul>   <li>項目1</li>   <li>項目2</li>  </ul> </div> ▼Script ------------------- var contents = $("div.info ul"); $("div.hoge").html(contents); ------------------- 多分、基本的な事なのかもですが、 1つの要素を重複して表示できる方法がありましたら 詳しい方、ご教授ください。 どうぞ宜しくお願いいたします。

    • ベストアンサー
    • AJAX
  • PHPのスクリプトで質問です。

    いつもお世話になっています。 PHPのスクリプトで質問なのですが、 まずは以下のスクリプトを拝見下さい。 <?php $opname=""; $opt=""; for($i=0;$i<sizeof($options_name);$i++) { $opname.="<div id='opname$i'>".strip_tags($options_name[$i])."</div>"; $opt.="<div id='opt$i'>$0</div>"; ?> <?php if ($options_comment[$i] != '' and $options_comment_position[$i] == '0') { ?> <h3 class="attributesComments"><?php echo $options_comment[$i]; ?></h3> <?php } ?> <div class="wrapperAttribsOptions"> <div class="optionName back"><?php echo $options_name[$i]; ?></div> <div class="back"><?php echo "\n" . $options_menu[$i]; ?></div> <div><?php echo $opt; ?></div> このとき、 オプション名1 選択メニュー1 価格[表示]         選択メニュー2        選択メニュー3 オプション名2 選択メニュー1 \0         選択メニュー2 価格[表示]        選択メニュー3 オプション名3 選択メニュー1 \0         選択メニュー2 \0        選択メニュー3 価格[表示] という風になってしまいます。 \0は、不要のため、表示したくないのですが・・・ どなたかご存知の方ご教授お願いできないでしょうか!!! 宜しくお願いします!!!

    • ベストアンサー
    • PHP

専門家に質問してみよう