• ベストアンサー

Smartyを使ってhtmlファイルを生成する方法で悩んでいます

Smartyとphpで動的にページコンテンツを生成するサイトをつくっています。 例えば、 index.php?m=front → front.phpにアクセスしてfront.tplを返す index.php?m=page2 → page2.phpにアクセスしてpage2.tplを返す index.php?m=page3 → page3.phpにアクセスしてpage3.tplを返す … という動作をさせています。 ただ設置しているレンタルサーバーが最近重く動作が鈍重になってしまい、phpファイルからただのhtmlファイルに換えたいと思っています。 上の例で言えば、 index.php?m=front → front.html としたいのです。 はじめからfront.htmlを用意し、file("front.tpl")でテンプレートを読み込んでファイルを書き換えようと試しましたが、データベースの情報を含むページにそのデータの内容が反映されないところで行き詰っています。 何かしらの方法で、 php → Smarty → html生成 ということができないでしょうか? よろしくお願いします。

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

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

  • ベストアンサー
  • f_motion
  • ベストアンサー率53% (7/13)
回答No.2

casheを作成しているならば、htmlと同等だと思うのですが・・・ cgiとして動かせば多少は、重くなるかもしれませんが、 よっぽど、アクセスが多くないのなら、それ程気にならないと思いますが? 普通のhtmlファイルが遅いのならば、サーバの問題でしょうし、 極端に違うならば別の問題かもしれないので、 サーバ会社へ問い合わせるのがよろしいのでは?

hiro_n19
質問者

お礼

>f_motionさん 以前はhtmlファイルで今ほど重くはなかったので、phpの処理の影響と思っていたのですが。 とりあえずサーバー会社には問い合わせてみます。 また、キャッシュの使い方の問題ということはありえますか? 物の本によれば、「テンプレート更新チェックのためのわずかな処理によってパフォーマンスが阻害される」とありましたが、例えば $smarty->cache_lifetime = 3600; $compile_check = false; にしておけば、一時間ごとにキャッシュが破棄され、アクセスがあれば新しいキャッシュが自動で更新される、ことになりますでしょうか?

その他の回答 (2)

  • alioth
  • ベストアンサー率48% (13/27)
回答No.3

やはりCGIプログラムとして呼び出されている以上、それなりのオーバーヘッドは避けられません。Apacheのモジュールとして動作させるサーバーに乗り換えるのがもっとも確実な方法だと思います。

hiro_n19
質問者

お礼

その通りですよね。 やはりサーバーの仕様はどうしようもありませんでした・・・ ありがとうございました。

  • f_motion
  • ベストアンサー率53% (7/13)
回答No.1

キャッシュを使えば、速度は速くなりますが、 DBが更新されたら、キャッシュも更新する などの処理も必要になります。 どれ位アクセスがあるか分かりませんが、 サーバなどに問題がありそうですが・・・

参考URL:
http://sunset.freespace.jp/Smarty/SmartyManual_2-6-6J_html/caching.html
hiro_n19
質問者

補足

>f_motionさん 回答いただいて有難うございます。 f_motionさんの仰るようにキャッシュを使用しています。DB更新毎にキャッシュを更新するという設定にもしております。 ただそれでも遅いときは、画面表示に数秒かかるときがあって、その状況を改善したいのです。 確かにサーバーの問題かもしれないですね。 サーバーは、e-storeのサイトサーブというプランを使っているのですが、phpの実行はcgiプログラムとして動作するとなっており、 e-storeのcgiファイルの設置に関しては、 【設置ディレクトリ 推奨は、ログインディレクトリ(docs/)の1つ上にある cgi-bin ディレクトリですが、docs ディレクトリ内  でも動作します。】 ← public_htmlです。 呼出アドレスについては 【 ・cgi-bin ディレクトリに設置した場合は、「http://www.お客様ドメイン名/cgi-bin/ファイル名」】 となっていますが、私はcgi-binディレクトリは使用していません。 自分の思い当たるところでは、上の点かという気がしています。(サーバーの知識が乏しいので勘ですが・・・) やはりphp → Smarty → html生成はできないでしょうか? それかサーバーに設置を工夫することで改善できるでしょうか?

関連するQ&A

  • ロリポップでSmartyのtpl読み込みエラー

    下記のコードを実行すると、  Smarty error: unable to read resource: "template1.tpl"  というエラーが出てしまいます。 $smarty->template_dirで指定したディレクトリ名の中に  "template1.tpl"というファイルは配置してあります。  原因などわかればおしえていただけないでしょうか。 index.php <?php require_once("Smarty.class.php"); $smarty = new Smarty; $smarty->template_dir = './templates/'; $smarty->compile_dir = './templates_c/'; $smarty->config_dir = './configs/'; $smarty->cache_dir = './cache/'; $smarty->display("template1.tpl"); ?> 【サーバ】  ロリポップです。 【その他】 index.phpをホームディレクトリ配下におくとエラーは消えます。 【ディレクトリ構成】 modules/index.php と templates/template1.tpl をがあり、 index.php から template1.tpl を読み込もうとしています。  ・modules →index.php ・templates →template1.tpl

    • ベストアンサー
    • PHP
  • Smarty includeでテンプレートを読み込めない

    よろしくお願いします。 まずphpファイルから $smarty->display('111/body.tpl');(*111はディレクトリ名) を呼び出して、さらにbody.tplと同ディレクトリにあるcontents.tplを読み込もうとしています。 はじめのbody.tplは読み込むことができブラウザで表示されるのですが、contents.tplは読み込めず、 Warning: Smarty error: unable to read resource: "contents.tpl" in <絶対パス>/Smarty/Smarty.class.php on line 1095 のエラーが出てしまいます。 ちなみに/111/というディレクトリは、$template_dir以下、$template_dir/111/です。 {include file="contents.tpl"} {include file="file:contents.tpl"} {include file="絶対パス/contents.tpl"} {include file="file:絶対パス/contents.tpl"} など試しましたが、ダメでした。 知恵をお貸しください。よろしくお願いします。

    • ベストアンサー
    • PHP
  • ファイルの配置について(Smarty使用)

    こんばんは。 いつもお世話になります。 Smartyを使用しているのですが、 ファイルの配置についてお知恵をお借りしたく思います。 ■前提1 %HOME%/BBB/index.tpl %HOME%/BBB/common/header.tpl %HOME%/BBB/infomation/infomation.tpl 各ファイルは上のように配置しています。 ■前提2 --- header.tplによる表示  --- --- メニュー.tplによる表示 --- 上のように、どのページにも、header.tplを使用して、 共通のヘッダページを表示しています。 ■前提3 各メニューへのリンクは、header.tplの内で、 <a href = "../infomation/infomation.php" > というようにリンクしています。 ■問題 http://www.AAA.co.jp/BBB/index.php へアクセスした場合、 header.php内のリンクが「../」となっているため、index.phpへのリンクが http://www.AAA.co.jp/index.php と、1つ下の階層へのリンクになってしまいます。 ■考えつく対策 対策として考えつくのは、 http://www.AAA.co.jp/BBB/index/index.php を用意して、「../」としても問題がないようにする。 上のように考えているのですが、出来るだけ、 http://www.AAA.co.jp/BBB/ へアクセスする事でindexページが表示されるようにしたいです。 マニュアルなどを深く読まずに作成しているため、 そもそも、Smartyの使い方として間違っているのかもしれませんが、 そちらを含めて、ご教授いただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • Smartyに関しまして

    require_once("Smarty/Smarty.class.php"); $smarty = new Smarty(); $smarty->template_dir = "./templates"; $smarty->compile_dir = "./templates_c"; $smarty->assign("message", "こんばんは"); $a = array('hello','php','html'); $smarty->assign('a',$a); $smarty->display("index.tpl"); これでindex.tplで出力すると日本語部分が「?????」になってしまいます。 何か設定がいるんでしょうか??

    • ベストアンサー
    • PHP
  • smartyについて

    smartyにでサイトを作る際のテンプレート構造について質問です。 現在はindex.phpで $smarty->display('hoge.tpl'); としhoge.tplは {include file="./common/header.tpl"} <div id="contents"> {include file="./common/left_side.tpl"} <div id="center"> ここに表示する内容 </div> {include file="./common/right_side.tpl"} </div> {include file="./common/footer.tpl"} のようにしています。 表示する内容はそれぞれ違うものの全てではありませんがincludeする tplは他のページもほぼ同様ですのでもっと効率的にできるのでは?と 思うのですがどんな方法があるでしょうか?

    • 締切済み
    • PHP
  • Smartyについて

    Smartyについて Smartyをインストールしました。 OS:ubuntu インストール先:/usr/local/lib/Smarty-2.6.26 php.ini[include_path]の設定:/usr/local/lib/Smarty-2.6.26/libs/を追加 /var/www/以下にtestフォルダ作成 /var/www/test/index.html | /test/index.php chmod 644 | /tempalates chmod 775 templates | / index.tpl chmod 644 /templates_c chmod 775 templates_c /configs chmod 775 configs /cache chmod 775 cache index.phpの内容 <?php require_once(”Smarty.class.php"); $o_smarty=new Smarty(); $o_smarty->template_dir="./templates/"; $o_smarty->compile_dir="./template_c/"; $o_smarty->assign("name","world"); $o_smarty->display("hello.tpl"); ?> index.tplの内容 <html> <head> <title>Hello,world</title> </head> <body> Hello,{$name}! </body> </html> http://web.domain/test/index.php を入力するとエラーは出ませんが、何も表示されません。 これだけで、原因を特定出来ないのかもしれませんが、何処が悪いのでしょうか? 御教示お願いいたします。

  • Smartyのエラーが2つずつ出ます

    PHP5+Smartyでサイトを作っています。 「$smarty->display("hoge.tpl");」としてテンプレートファイルを呼び出します。 そのテンプレートファイル「hoge.tpl」が存在しない時に、以下のエラー文が必ず2つ表示されます。 Warning: Smarty error: unable to read resource: "hoge.tpl" in /root/.../smarty/Smarty.class.php on line 1092 一度しか呼び出していないのにエラーが2つ表示されるので、コードの記述ミスかと考えたのですがわかりませんでした。 テンプレートファイルがある場合は、テンプレートが二度呼び出されることはありません。 エラー文にある1092行目からコードを追って見たのですがわかりませんでした。 どうすればエラー表示を1つにできるのでしょうか? 宜しくお願いします。

    • 締切済み
    • PHP
  • Smartyについて教えてください。

    Smartyについて教えてください。 参考書によってテンプレートの存在するディレクトリを指定している場合(1)と していない場合(2)がありますが、 どちらが正しいのでしょうか? (1) ********************************************* require_once('smarty/libs/Smarty.class.php'); $smarty = new Smarty(); $smarty->template_dir = "template02/"; $smarty->compile_dir = "compile/"; $smarty->display("content.tpl"); ********************************************* (2) ********************************************* require_once('smarty/libs/Smarty.class.php'); $smarty = new Smarty(); $smarty->display("content.tpl"); *********************************************

    • ベストアンサー
    • PHP
  • Smartyでtplファイルから配列をassignする方法

    Smartyを使っているんですが、テンプレートファイル(.tpl)側から配列の要素を入れることができません。 PHPからだと、 $test[test]="内容"; $smarty->assign("test",$test); でいけるんですが、tplからだと、 {assign var="test.test" value="内容"} としても入らないんです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Pleskサーバ利用時にSmartyのassignが出来ません

    現在、Pleskサーバを利用して、 Apache+Smarty+PHPのWEBプログラミングを行っているのですが、 PHPのユーザ関数内で、Smartyのassign()関数を使用した場合に、Smarty変数の生成を行うことが出来ません。 例としては以下のような感じになります。 ================================================================ <? $smarty->assign( 'a', 'a' ); // テンプレート上で{$a}とするとaと表示される test( $smarty ); $smarty->display('index.tpl'); // index.tplを表示する function test( $smarty ) { $smarty->assign( 'b', 'b' ); // テンプレート上で{$b}としてもbは表示されない } ?> ================================================================ $smartyというのは、$smarty = new Smarty();を行ったものです。 このプログラム自体は、Plesk導入前は動作しておりましたが、 Plesk導入後は上記のように、ユーザ関数外では、通常通りassign()を行うことが出来るのですが、ユーザ関数内だと無効となってしまいます。 また、Pleskのsafe_modeはOffにしております。 Pleskは初めて使用するため、動作上まだ知らないことばかりで、とても初歩的なミスをしているかと思いますが、Pleskに詳しい方がおりましたらどうか教えて頂きたいと思います。

    • ベストアンサー
    • PHP

専門家に質問してみよう