ブログの最も大きな長所と言えば、記事を書くだけでページ(HTML)を生成してくれることではないでしょうか?(こういう機能をCMS機能と言ったりします)
そのブログの要、最も便利な機能である「ページ生成」を最初に実装してしまいましょう。
処理の流れとしてはこんな感じです。
なお今回はフォームデータの読み込みから、ファイル作成・保存までを行います。テンプレートファイルの読み込みは次回に。
まずはテンプレートファイルを読み込まずに、読み込んだフォームデータをそのままファイルに出力するスクリプトを書いてみます。
<html> 〜 <body> <form action="makefile.php" method="POST"> <textarea name="honbun" rows="5" cols="50"></textarea><br /> <input type="submit" value="送信" /> </form> </body> </html>
<html> <head> <title>ブログ作成</title> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> </head> <body> <?php if ($_POST{"honbun"}) { // ※1 記事が記入されていればファイル生成開始 $honbun = $_POST{"honbun"}; // ※2 タグを除去する場合はコメントアウトを外す // $honbun = htmlspecialchars($honbun); // ※3 文字コードをEUCに変換 $honbun = mb_convert_encoding($honbun, "EUC-JP","AUTO"); // ※4 クオーテーションマークを変換 if(get_magic_quotes_gpc()) { $honbun = stripslashes($honbun); } // ※5 乱数を生成してファイル名に $filename = rand( 1000000, 9999999) . ".html"; // ※6 ファイル生成&書き込み $handle = fopen( $filename, 'w'); fwrite( $handle, $honbun); fclose( $handle ); // メッセージ表示 echo $filename. "を生成し、書き込みを行いました。"; } else { echo "フォームから記事の内容を送信してください。"; } ?> </body> </html>
// ※1 記事が記入されていればファイル生成開始
フォームからのデータ受け取りは、method="POST"ならば$_POST{"名前"}、method="GET"ならば$_GET{"名前"}で受け取ることができます。
// ※2 タグを除去する場合はコメントアウトを外す
htmlspecialcharsは、>,<,&などHTMLにおいて特別な意味を持つ記号を>,<,&などの無害な表示に置き換えるタグです。一般公開する場合には有効にすることをおすすめします。
// ※3 文字コードをEUCに変換
mb_convert_encodingは文字コードを変換する関数です。書式としては次のようになります。
mb_convert_encoding( 変換文字列, 変換後文字コード, 変換元文字コード)
指定できる文字コードでよく使われるのは、SJIS(シフトJIS)、UTF-7(UTF), EUC-JP(日本語EUC)などでしょう。変換元文字コードには、AUTO(自動)を選択することもできます。
なお変換元文字コードを省略した場合には内部文字エンコーディングからの変換となります。
// ※4 クオーテーションマークを変換
クオーテーションマーク(')、ダブルクオーテーションマーク(")はフォームから渡されるとそれぞれ、\',\"というようにバックスラッシュ(\) がついてしまうので、stripslashes関数を使ってこれを修正しています。この部分はそのまま覚えておいても良いでしょう。
// ※5 乱数を生成してファイル名に
rand関数は、乱数を生成する関数です。min〜max(両端含む)の間の乱数を生成したい場合には次のような書式となります。
rand( min, max)
// ※6 ファイル生成&書き込み
fopen関数はファイルのオープンを行います。
fopen( ファイル名, 読み書きモード)
読み書きモードでよく使われるものとしては次のようなモードがあります。
mode | 説明 |
---|---|
'r' | 読み込みのみ |
'r+' | 読み書き両用 |
'w' | 書き出しのみ。ファイルサイズをゼロに。ファイルが存在しない場合には作成 |
'w+' | 読み書き両用。ファイルサイズをゼロに。ファイルが存在しない場合には作成 |
'a' | 書き出しのみ。ファイルポインタをファイルの終端に。ファイルが存在しない場合には作成 |
'a+' | 読み書き両用。ファイルポインタをファイルの終端に。ファイルが存在しない場合には作成 |
このほかに、'x'と'x+'のモードがあるのですが、使う機会はまずないでしょう。
次のfwrite()でファイルに書き出しを行い、fclose()でファイルを閉じています。この一連の流れはそのまま覚えておくと良いでしょう。
fwrite( ファイルハンドル, 書き込む内容)