implode PHPにおける配列文字列の連結 初心者PHPプログラマの備忘録(2)

| コメント(0) | トラックバック(0)


このエントリーをはてなブックマークに追加
PHPにおけるファイル操作(1)初心者PHPプログラマの備忘録の続きです。引き続き、フリーで配布されていた掲示板プログラムのmake_html.phpというphpプログラムを、上から順に読んでいきます。ただそれだけ。

本エントリーでは、以下の部分を解説します。今回は簡単そうな気がしますです。

#====================================================
# 本HTML吐き処理
#====================================================
$fp = fopen($INDEXFILE, "w");
#--------ヘッダ&上の広告
list($header, $footer) = explode('<CUT>', implode('', file("../test/index.txt")));
$header = str_replace("<BBS_TITLE>", $SETTING['BBS_TITLE'], $header);
$header = str_replace("<BBS_TEXT_COLOR>", $SETTING['BBS_TEXT_COLOR'], $header);
$header = str_replace("<BBS_MENU_COLOR>", $SETTING['BBS_MENU_COLOR'], $header);
$header = str_replace("<BBS_LINK_COLOR>", $SETTING['BBS_LINK_COLOR'], $header);
$header = str_replace("<BBS_ALINK_COLOR>", $SETTING['BBS_ALINK_COLOR'], $header);
$header = str_replace("<BBS_VLINK_COLOR>", $SETTING['BBS_VLINK_COLOR'], $header);
$header = str_replace("<BBS_BG_COLOR>", $SETTING['BBS_BG_COLOR'], $header);
$header = str_replace("<BBS_BG_PICTURE>", $SETTING['BBS_BG_PICTURE'], $header);
$header = str_replace("<BBS_TITLE_NAME>", $bbs_title, $header);
$head = implode('', file($PATH."head.txt"));
$header = str_replace("<GUIDE>", $head, $header);
$option = implode('', file("../test/option.txt"));
$header = str_replace("<OPTION>", $option, $header);
$putad = implode('', file("../test/putad.txt"));
$header = str_replace("<PUTAD>", $putad, $header);
fputs($fp, $header);
$headad = implode('', file("../test/headad.txt"));
if ($headad) {
fputs($fp, '<br><table border="1" cellspacing="7" cellpadding="3" width="95%" bgcolor="'.$SETTING['BBS_MENU_COLOR']."\" align=\"center\">\n <tr>\n  <td>\n");
fputs($fp, $headad);
fputs($fp, "\n  </td>\n </tr>\n</table><br>\n");
}
前回は、過去ログ用の超シンプルなhtmlを生成するプログラムでしたが、冒頭にあるように、本htmlの生成を行うプログラムに突入しています。

$fp = fopen($INDEXFILE, "w");

前回学びました。$INDEXFILEというファイルを書き込み専用で開いて、$fpがファイルポインタとなります。
$INDEXFILEは、別のファイルで以下のように定義されていました。


$INDEXFILE = $PATH."index.html";

index.htmlへのpassが指定されています。なにはともあれ、単純にindex.htmlファイルを今から操作しますよということです。

本プログラムでは、ヘッダーに、サイト説明文と、広告の表示領域があります。

#--------ヘッダ&上の広告
list($header, $footer) = explode('<CUT>', implode('', file("../test/index.txt")));

list()は、以下。

list(変数) = array (インデックス);
一つ以上の変数に、配列のインデックスを割り当てます。array()関数で定義された値と同じ数の変数にそれぞれのインデックスを引き渡します。

うん、ちょっと何を言っているのか意味が分かりません。僕の日本語力が足りないせいでしょうか。よく分かりませんが、listで指定されている$headerと$footerに、= の右側で処理したデータを入れているんだと思いますので、とりあえず右側を見てみましょう。

explode("区切り文字", "配列のためのインデックス");
引数の文字列を指定した文字で区切ります。分割された文字列は配列として返されます。

<CUT>という文字列で、implodeで指定されたデータを区切った上で、分割された文字列が、それぞれ、$header $footerに代入されるようです。なるほど、index.txtには、<html>から始まる、index.html用のhead要素とbody要素が記述されており、<CUT>の前後に、ヘッダー部分とフッター部分のhtmlが記述されていました。実際のindex.htmlにはスレッド一覧などの要素があるのですが、index.txtは、それがありません。つまり、ここのプログラムによって、ヘッダーの広告までの要素と、フッターの要素だけを定義するために、index.txtは存在しているようです。

では次のプログラム。

$header = str_replace("<BBS_TITLE>", $SETTING['BBS_TITLE'], $header);
$header = str_replace("<BBS_TEXT_COLOR>", $SETTING['BBS_TEXT_COLOR'], $header);
$header = str_replace("<BBS_MENU_COLOR>", $SETTING['BBS_MENU_COLOR'], $header);
$header = str_replace("<BBS_LINK_COLOR>", $SETTING['BBS_LINK_COLOR'], $header);
$header = str_replace("<BBS_ALINK_COLOR>", $SETTING['BBS_ALINK_COLOR'], $header);
$header = str_replace("<BBS_VLINK_COLOR>", $SETTING['BBS_VLINK_COLOR'], $header);
$header = str_replace("<BBS_BG_COLOR>", $SETTING['BBS_BG_COLOR'], $header);
$header = str_replace("<BBS_BG_PICTURE>", $SETTING['BBS_BG_PICTURE'], $header);
$header = str_replace("<BBS_TITLE_NAME>", $bbs_title, $header);


str_replaceは、前回解説の通り

str_replace (検索文字, 置換後の文字列, 元の文字列)

でした。

BBS_TITLEなどと独自に定義した文字列で、index.txtのヘッダー部分のプログラム($header)を検索して、$SETTING['HOGE']で指定されているそれぞれのデータに置換します。$SETTING["hHOGE"]の各データは、settting.txtという外部ファイルでそれぞれ定義されていました。管理画面から設定したタイトルや文字色などのデータが、setting.txtに格納されているようです。

$head = implode('', file($PATH."head.txt"));

implodeは、以下の通り。

string implode( string 連結文字, array 連結したい配列 )
implode()は、全ての配列要素を指定した結合文字で連結します。各要素間に指定した結合文字をはさんで1つの文字列としますが、配列の順番は変更されません。

配列を、指定した文字列で連結してくれるようですが、ここでは、ファイルhead.txtが指定されています。配列じゃなくてもいけるんですね。とりあえずhead.txtに書き込まれたデータを、変数$headに代入しています。ちなみに、head.txtというファイルは空っぽでしたので、僕は使っていないようです。

$header = str_replace("<GUIDE>", $head, $header);
$option = implode('', file("../test/option.txt"));
$header = str_replace("<OPTION>", $option, $header);
$putad = implode('', file("../test/putad.txt"));
$header = str_replace("<PUTAD>", $putad, $header);

ここら辺はすべて同じ処理の繰り返しですね。
$headerに格納されているindex.htmlのヘッダー部分から、予め定義した文字列に、値を代入して、具体的なデータを形作ります。

fputs($fp, $header);
$headad = implode('', file("../test/headad.txt"));
if ($headad) {

前回のソースで指定されたファイルポインタ$fpに、$headerを書き込んで
、headad.txt内のデータを連結して$headadに代入。
もし、$headadにデータがあれば、以下の処理をします。


fputs($fp, '<br><table border="1" cellspacing="7" cellpadding="3" width="95%" bgcolor="'.$SETTING['BBS_MENU_COLOR']."\" align=\"center\">\n <tr>\n  <td>\n");
fputs($fp, $headad);
fputs($fp, "\n  </td>\n </tr>\n</table><br>\n");
}

同じく、$fpにhtmlや、$headadを書き込みます。
["BBS_MENU_COLOR"]というのも、上述のsetting.txtにて定義されている文字色を指定する文字列です。

ということで、今回のソースコードは以上です。

気力と時間があれば、また続きに進みます。本日はここまで。

参考にしたページ

トラックバック(0)

トラックバックURL: http://www.enjoy-com.com/mt/mt5/mt-tb.cgi/769

コメントする

        

人気エントリー