2008年04月28日

PHPから静的htmlをサーバへ生成

PHPカテゴリを新規に作りました。


PHPはサーバサイドスクリプト
なので、hogehoge.phpというファイルにスクリプトが書かれている場合、クライアントがそのファイルにアクセスする度にサーバ側でスクリプトの処理が行われhtmlが生成され、クライアントのブラウザが解釈し、表示します。

作ったPHPファイル内のスクリプトがサーバにかける負荷が大きかったり、スクリプトでの処理結果が出るまでに時間がかかってしまう場合があります。

そんな時、私はhogehoge.phpを別のPHPから呼び出し、hogehoge.htmlをサーバに作成してしまい、クライアントからはhogehoge.htmlを呼ぶようにしています。

PHP1ファイルでDBやテキストファイルへのアクセスを複数回したり、SQLをループで何回も投げたりする場合で、且つスクリプト部分から呼び出されるデータがそれほど頻繁に変更がかからない場合などに有効かと思います。


要は、データに変更がかかった場合のみ、自動生成のためのPHPにアクセスしてボタンをぽちっと押してやるとデータ変更が反映されたhtmlがサーバに作られるというものです。






流れとしては、

1.あらかじめサーバ内にファイルが作られる場所を確保する。
2.クライアントに見てもらいたいファイル、つまり行いたい処理が書かれたPHP(仮にhoge.php)を作る。
3.ボタンを押すとファイルが作られる処理を書くPHP(仮にcallhoge.php)を作る。
4.ボタンをぽちっと押す。
5.スクリプト処理が終わったhtmlが作られる。

こんな感じです。

1.のディレクトリは書き込み権限を許可しておかないと怒られます。
hoge.phpの内容は当然その時それぞれ人によって違うので、ここではcallhoge.phpのソースをのせます。


<?php
//POSTされた値を受け取る
$create = htmlspecialchars($_POST['create'],ENT_QUOTES);
//生成場所
$savepath = "/var/www/html/dirhoge/";
//POSTされたか否か
$hantei = 0;
if(($create != null) and ($create != ""))
{
  $hantei = 1;
}

//POSTされたら
if($hantei == 1)
{
  //****** hoge.html作成 ******
  $filename = "hoge.html";
  $html_tmp = "";
  $html = "";
  //出力をバッファリング開始
  ob_start();
  //処理したいファイルをインクルードする
  require('./hoge.php');
  $html_tmp = ob_get_contents();
  $html = str_replace("\r","",$html_tmp);
  //保存処理
  if(!($fd = fopen($savepath . $filename,"w"))){die($filename . " 書き込みオープン失敗");}
  if(!($rslt = fwrite($fd,$html))){die("書き込み失敗");}
  fclose($fd);
  // バッファリング終了&破棄
  ob_clean();
  echo '<div style="padding-top:10px;"><a href="hoge.html">hoge.html</a>を作成しました。</div><br>';
  //******************************
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<title>html生成</title>
</head>
<body>
<?php
//POST前
if($hantei == 0)
{
?>
  <form name="form1" method="post" action="">
  <input type="submit" name="create" value="静的html作成">
  </form>
<?php
}
//POST後
else
{
?>
  <form name="form2" method="post" action="">
  <input type="submit" name="back" value="戻る">
  </form>
<?php
}
?>
</body>
</html>



こんな感じですがあとは使いやすいようにカスタマイズしてみてください。

にしてもスクリプトってブログに書きづらいなぁ・・・。
よくソースコードが綺麗に色分けされたりしてるブログを見るけどああいうのはどうやってるのだろう・・・。




何かしら参考になりましたらクリックをよろしくお願いします
にほんブログ村 IT技術ブログへ   人気ブログランキング    
タグ:PHP
posted by トモヒロ | Comment(4) | TrackBack(1) | PHP
この記事へのコメント
これは!
私はよくアド用サイトでwordpressを使用しているのですが、ベースがPHPなんですね。
なので、静的なhtmlで書き出す技術にはすごく興味があります。
今の所、SEOにおいて検索エンジンでは動的か静的かという事をURLで判断するらしいのでwordpressを使用したサイトのパーマリンクを変更して対応していますが、
ユーザーへの負担という部分を考えたら静的に吐き出す方法などないのかな、と思っていた次第です。
知識がなくて全て理解できないのがつらい(笑)
頑張って調べます!!

あと、ソースコードはスタイルシートで<pre>や<code>を追加して表示している方が多いようです。
私は、preのみでマークアップしています。
以下のサイトが参考になりました。
http://www.ideaxidea.com/archives/2006/09/post_128.html
http://www.ideaxidea.com/archives/2006/09/post_130.html
Posted by K子 at 2008年04月29日
MovableTypeやWordPressは私も使ってみようかと考えた時がありましたが、初めてのブログでしたのでそこまで大げさにやらなくてもいいかなと思い無料ブログを適度にカスタマイズして使うことにしました^^;

静的ページにする方法は、本当に静的なページにしてしまう方法(私の記事)やあたかも静的ページのように見せる、
mod_rewrite
http://memorva.jp/memo/linux/mod_rewrite.php

PATH_INFO
http://exam.su-jine.com/path_info/path/info.html
がありますね。

あたかも見せるだけ(SEO目的)ならmod_rewriteやPATH_INFOでもいいですがサーバ負荷や表示速度を考えると実際に静的ファイルを書き出したほうがいいですね。

サーバをいじれるならcronを使って定期的に自動生成させることもできます。
Wordpressなら色んなモジュールがありそうな気もしますが、なければやはり自作するしかないですね^^;
Wordpress特有の関数とPHPの関数を使えばできそうですし実際やっている人もいるかもしれないですね。
何かお手伝いできそうなことがあれば言って下さい。

それと、ソースの書き込みについての参考文献ありがとうございました m(_ _)m
おかげで改行やスペースは文献のやり方で対処できそうです。

PHPの参考ソースが載っているサイトなどで関数名にマウスポインタを乗せると説明がポップアップしたり、関数や命令で色分けされたりするサイトがあるんですがああいうのはWordpressとかMovableTypeで専用モジュール使ったりしてるんだろうなぁと。。
Posted by トモヒロ at 2008年04月29日
トモヒロさん、詳しく教えていただいてありがとうございます!
調べたところ、WPでHTMLではきだして・・とやっている方は少なく、
ほとんどの方がキャッシュのログを生成させるプラグインかパーマリンクの設定にて対応しているようです。
WPは、.htaccessを自動的に変更してくれるので楽といえば楽なのかもしれません。
サーバーにもよると思いますが、やはり表示が多かったりプラグインを多様しているサイトは表示が遅くなってしまうんですよね。

一応、生成スクリプトは発見することができたのですが
http://bmky.net/product/script/petit.html
zipのDL先がnot found でしたorz
今後もちょこちょこと調べていきたいと思います。

ソースコードの色分けについては、WPだったら色々なプラグインがあるようでした。
http://jmblog.jp/archives/62
Posted by K子 at 2008年04月30日
私も少し調べてみました。
確かに静的htmlを生成している人はプラグインでキャッシュから生成しているっぽいですね。
http://wppluginsj.sourceforge.jp/i18n-ja_jp/wp-cache/

まあこれでも十分サーバの負荷軽減にはなるのではないでしょうか。
生成後は静的ファイルへのアクセスになるわけですし。


ソースコードの色分け表示ですが現在奮闘中です^^;
あと少しな感じなんですけどねぇ。。
Posted by トモヒロ at 2008年05月01日
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック

ホームページ設計
Excerpt: 今作成中の某ジャンルの検索サイト。 サーバー等のコストを極力抑えたいので、できる...
Weblog: ATABLOG
Tracked: 2008-12-11 19:21
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。