phpでテンプレートを作成する方法

このQ&Aのポイント
  • phpでテンプレートを作成する方法について質問です。サンプルを試しましたがうまく行きません。
  • テンプレート表示用の関数を作成しましたが、正しくテンプレートの表示ができません。
  • 参考記事によると、phpのテンプレート作成方法について詳しく説明されています。
回答を見る
  • ベストアンサー

php テンプレート

すみません。phpで質問です。 テンプレートを用意しようと思いとりあえずサンプルを探して動かしてみたのですがうまくテンプレートのように動きません。 ちゃんとした動かし方をお教えてください。 (tempファイルの拡張子はphpがいいです。) temp.html <h2>この記事は、_+test+_です。</h2> func.php <?php function func_temp($html_file, $disp_data) { // テンプレート表示用の関数 $html_data = file_get_contents($html_file); // テンプレートファイルを読み込み $replaced = '/_+(.*)+_/'; // 検索するパターンの指定 $html_data = preg_replace($replaced, $disp_data, $html_data); // 置換実行 return $html_data; // 表示用のHTMLデータを返す } ?> access.php <?php require 'func.php'; // テンプレート機能ファイルを読み込む $data = 'PHPのテンプレートって何で作る?'; // 画面に表示させるデータを登録 echo func_temp('temp.html', $data); // テンプレート機能関数を呼ぶ ?> 参考: https://www.sejuku.net/blog/73463

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

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

  • ベストアンサー
回答No.1

>ちゃんとした動かし方をお教えてください。 まず、指定の >参考: >https://www.sejuku.net/blog/73463 に書かれているやり方をそのまま実行して普通に動きましたよ。 動かない場合は、デバッガーで1行1行 ステップトレースしてみてはいかがでしょうか? 添付した画像のように、 <h2>この記事は、_+test+_です。</h2> この部分が、 <h2>この記事は、PHPのテンプレートって何で作る?です。</h2> に置き換わって送り出されていれば、成功です。 (このプログラムはそれしかもともとしてないので、これで正しいです) それと、 >(tempファイルの拡張子はphpがいいです。) ですが、 $html_data = file_get_contents($html_file); これは、ローカル取り込みなので、グローバル取り込みにすれば 一応は動く半面、 一つ目のHTTP通信内で、別のHTTP通信を発生されるので、 無駄に重くなるだけですが。 それでもいいなら、 https://www.php.net/manual/ja/function.file-get-contents.php (公式説明) を参考にどうぞ! ということで、回答として 「実際にこちらでもやってみましたが、特に  何もしなくてもそのまま動作することが確認され、  正しく動作しました」 で、終わってしまいました。

dhtfyjh
質問者

お礼

うーん、なぜかできませんでした。 代替案を模索します。

関連するQ&A

  • PHPでHTMLファイル置換 プログラムについて

    以下のプログラムを書きました。 あるHTMLファイルをテンプレートとし、 中に記述している置換文字列を動的に 表示させるというものです。 しかしなかなか表示されません。 どこがおかしいのでしょうか? --template.html-- <html><head><title>test</title></head> <body> 表題 他いろいろ <!-- data replace --> フッター いろいろ </body></html> --index.php-- $page_lines = File("template.html"); $all_lines=''; foreach( $page_lines as $line ){  $all_lines .= $line; } $str = "<div>出力用データいろいろ</div>"; print preg_replace(/<!-- data replace -->/,$str, $all_lines); 以上です。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • インクルードファイル内にPHPコードを挿入してecho表示

    処理が異なる2つのPHPファイルを一つのテンプレートファイルから index.phpファイルへ表示させたいのですが、テンプレートファイル内に css_echo.phpをインクルードさせたコードを書くとそのままソース上に表示されてしまいます。 どのような方法をとればいいかアドバイス下さい。 ■条件としては、 ・css.php/css_echo.phpの処理ファイルはそれぞれ別ファイルとしたい ・index.phpファイルは <html> <head> <?php require_once('./css_echo.php');//ブラウザを判別してCSSファイルを出力 ?> </head> <body> <?php $temp = "./temp.html"; //このページのテンプレートファイル名パス require_once('./echo.php'); ?> </body> </html> には書かない方法で対応したいです。 ファイルは以下です。 ---------------------------------------------------------------------- テンプレートファイル(temp.html) <html> <head> <!--問題はここです。 --> <?php require_once('./css_echo.php');//ブラウザを判別してCSSファイルを出力 ?> </head> <body> サンプル表示{この中はブラウザ判別して表示・非表示にする} </body> </html> 処理PHPファイル(echo.php) <?php $htm = file_get_contents($temp); echo preg_replace('/[{}]/', '', $htm);// {}内を削除して表示 ?> ブラウザ判別用ファイル(css_echo.php) <?php //実際にはこの前にブラウザ判別し処理コード(省略) echo "<link rel=\"stylesheet\" href=\"$dir$pc\" type=\"text/css\">\n"; ?> メイン表示用PHPファイル(index.php) <?php $temp = "./temp.html"; //このページのテンプレートファイル名パス require_once('./echo.php'); ?> ------------------------------------------------------------------------

    • 締切済み
    • PHP
  • PHPファイルとテンプレートファイルの書き方

    <?php // ファイル名 $fname = "test.csv"; // ファイルを開く $file = fopen($fname, "r"); // 全データを出力する while (list($id, $name, $add) = fgetcsv($file, 1000, ",")) { echo "<hr>"; echo "<br>ID:".$id; echo "<br>名前:".$name; echo "<br>住所:".$add; } // ファイルを閉じる fclose($file); ?> <質問> 上の内容をSmartyを使ってPHPファイルとテンプレートファイルに分離したい。 テーブルにCSVファイルのデータが入るようにしたい。 PHPファイルとテンプレートファイルの書き方を教えてください。

    • 締切済み
    • PHP
  • PHPでのWaning

    PHPでのWaning PHPファイルにてメッセージ抑止をしたいのですが、どのようにすれば良いのでしょうか? 「ディレクトリトラバーサル」脆弱性とのご指摘を頂いております。 http://xxxx.com/sys/dl.php?file=01(正常なURL) http://xxxx.com/sys/dl.php?file=00(ディレクトリ内に無いURL) 上記のように​http://xxxx.com/sys/dl.php?file=00と言うページが無く (あったとしても見られても問題ない) http://xxxx.com/sys/dl.php?file=01以外のアドレス(?file=)以降、ユーザーがURLの打ち間違えをしたら Waning: file(~):failed to open stream:No such file or directory in....................../utl.php on line 139 が出ます。 上記「Waning」では無く、他のメッセージ(表示URLは変えずにhtmlで出力)を出したいのです。 utl.phpの139行目は $utl = new Utl(); $template = $utl->readTemplate($template_file); $template_file テンプレートファイルへのパス 返り値 $template テンプレートファイル(SJIS) */ function readTemplate($template_file){ (139行目)foreach(file($template_file) as $v){ $template .= $v; } $template = mb_convert_encoding($template, "EUC-JP", "auto"); return $template; } /* どうぞ、よろしくお願い致します。

    • 締切済み
    • PHP
  • PHPでPHPファイルを作成することはできますか?

    タイトルの通りの質問です。 http://example.jp/test.phpを実行すると、 tempというディレクトリが作成され、さらにその中に file.phpが作成するなんてことできませんか? file.phpの中身は ---ここから <?php echo "<html><body>hello world!</body></html>"; ?> ---ここまで …とし、当然ながら http://example.jp/temp/file.php にアクセスすると「hello world!」と表示されるようにしたいのですが。

    • ベストアンサー
    • PHP
  • phpでテンプレート作成時の条件分岐

    htmlでwebサイトを作成しています。 ファイル自体はphpにして、ヘッダーやナビゲーション、フッターなど、 共通部分はテンプレート化してincludeさせていますが、 サイトのTOPページだけ、微妙に表示を変えたいところがあります。 TOPページだけ、テンプレートを使わなければ良い話なのですが、 出来ればテンプレートを読み込ませたいと思っています。 そこで、特定のページにだけあるタグを表示させたりする条件分岐の書き方を 教えてください。 ソース中に下記のように書くのだとおもうのですが、、 <?php if (条件) { <p>○○○</p> } else {  <h2>xxxxx</h2> <p>○○○</p> } ?> (条件)部分の書き方がわかりません。 よろしくお願いします。

    • 締切済み
    • PHP
  • templateのエラー

    すいません、C++始めたばっかりなのですが、 以下のようなエラーが出て困っています。 ClusteringMain.obj : error LNK2001: 外部シンボル ""public: void __thiscall File2Array<double>::disp(void)" (?disp@?$File2Array@N@@$$FQAEXXZ)" は未解決です。 どなたかご教授ください。 環境はWindows XP, Visual Studio.NET 以下はソースです。 --------ClusteringMain.cpp------------ #include < iostream > #include"File2Array.h" using namespace std; int main() { cout << "Hello world" << endl; File2Array<double> test; test.disp(); return 0; } ---------File2Array.cpp----------------- #include"File2Array.h" template <class Type> void File2Array<Type>::disp(void) { cout << "aaaaa" << endl; } ---------File2Array.h------------------- #include<iostream> #include<fstream> using namespace std; #ifndef FILE2ARRAY_H #define FILE2ARRAY_H 1 template <class Type> class File2Array { private: Type var; public: void disp(void); }; #endif // #define FILE2ARRAY_H 1

  • preg_replaceでの正規表現について

    お世話になります。 ereg_replace で書いた正規表現による置換処理を、 preg_replace に置き換えようとしています。 (preg_replaceの方が処理が速いとマニュアルにあったので) ところが、preg_replaceでの正規表現検索がうまくいかないで困っています。 基本的には、ereg_replaceの正規表現部分を//で囲んでいるだけです。 具体的には、下記のような処理を書いています。 間違いがあれば、ご指摘いただけましたら幸いです。 //### うまくいっている ereg_replace のパターン ここから ### $html=file_get_contents('template/temple.html'); //ひな形読み込み $search='\{dokuji tag\}.+\{_dokuji tag\}'; $replace=''; $html=ereg_replace($search,$replace,$html); //不要部分の削除 //### うまくいっている ereg_replace のパターン ここまで ### ↓ //### うまくいかない preg_replace のパターン ここから ### $html=file_get_contents('template/temple.html'); //ひな形読み込み $search='/\{dokuji tag\}.+\{_dokuji tag\}/m'; $replace=''; $html=preg_replace($search,$replace,$html); //不要部分の削除 //### うまくいかない preg_replace のパターン ここまで ### //### 置き換えるソース('template/temple.html') ここから ### <!-- {dokuji tag} --> <tr> <td nowrap><strong>タイトル:</strong></td> <td> <input type="text" name="name" size="80" value="{name}" /> </td> </tr> <!-- {_dokuji tag} --> //### 置き換えるソース('template/temple.html') ここまで ### よろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • PHPでWindowsのローカルドライブに書き込みたい

    PHP初心者ですが、PHPのファイル操作で質問があります。 サーバー上にあるファイルをWindowsのクライアントのフォルダに保存したいのですが、サーバーの作業ディレクトリに保存されてしまいます。 以下のようなテストプログラムで実験しています。(エラー処理は省略) $server_file_data=file_get_contents('server.dat'); $local_file = 'd:\\temp\\local.dat'; $cfp = fopen($local_file, "wb"); fwrite($cfp,$server_file_data); fclose($cfp); このPHPを走らせるとサーバーのカレントフォルダ上に d:\temp\local.datが作成されます。 Windows用のパスまでがファイル名に入っちゃってます。 ローカルのドライブにPHPが書き込むという動作がセキュリティ上望ましくないことは理解していますが、ここでは技術的な解決策をどなたかご教授できるでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • テンプレートを実現するために

    テンプレートはtemp.htmlというファイルに用意してまります。これをPHPでfile()で読み込み、 一行ずつforeachで出力していくという感じです。 $nameのところは、PHPの中で定義されている$nameとして出力したいと思っているのですが、そのまま「$name」と出力してしまいます。 この辺りはどうすれば解決できますでしょうか? ($nameや$time等複数あります)

    • ベストアンサー
    • PHP

専門家に質問してみよう