設定ファイルの読み書き - PHPでファイルの読み書き・掲示板
目次
- PHPでファイルの読み書き・掲示板
- ファイルの読み込み
- ファイルの書き込み
- ファイルの読み書き(ゲストブック)
- 設定ファイルの読み書き
- CSVファイルの読み込み
- テキストエディタの作成
- アンケートシステムの作成
- 掲示板1(シンプル)
設定ファイルを読み込む
アプリケーションのさまざまな状態を保存するのに、「設定ファイル」と言うものを使うことが良くあります。設定ファイルは、
キー=値
という行の羅列が最もよくある形式です。PHPでは設定ファイルを一度に連想配列に読み込む「parse_ini_file」関数が用意されています。
プログラムの作成
以下のソースを入力してください。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>設定ファイルを読み込む</title>
</head>
<body>
<pre>
<?php
$ini = parse_ini_file('config.ini');
print_r($ini);
?>
</pre>
</body>
</html>
入力が終わったら「config1.php」というファイル名で保存し、サーバにアップしてください。設定ファイルの作成
テキストエディタを開き、以下の内容を書き込んでください。
color=red
bgcolor=black
fontsize=200%
入力が終わったら「config.ini」というファイル名で保存し、サーバにアップしてください。その後、config1.php を実行します。ソースの解説
$ini = parse_ini_file('config.ini');
parse_ini_file関数は、設定ファイルの内容を連想配列に格納する関数です。今回の場合は、$ini['color'] に red、$ini['bgcolor'] に black、$ini['fontsize'] に 200%、がそれぞれ格納されます。
print_r($ini);
print_r関数は引数で指定した変数の内容を分かりやすい形式で表示してくれるデバッグ用の関数です。HTMLだと改行が繋がってしまうので<pre>タグで囲んでいます。設定ファイルを反映させる
設定ファイルの読み込みができたところで、実際にその設定ファイルに沿ってページを表示してみます。プログラムの作成
以下のソースを入力してください。
<?php
$ini = parse_ini_file('config.ini');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css">
body {
color: <?php print $ini['color'] ?>;
background-color: <?php print $ini['bgcolor'] ?>;
font-size: <?php print $ini['fontsize'] ?>;
}
</style>
<title>設定ファイルの反映</title>
</head>
<body>
<p>
設定ファイルのテスト<br>
設定ファイルのテスト<br>
</p>
</body>
</html>
入力が終わったら「config2.php」というファイル名で保存し、サーバにアップしてください。その後、config2.php を実行します。ソースの解説
body {
color: <?php print $ini['color'] ?>;
background-color: <?php print $ini['bgcolor'] ?>;
font-size: <?php print $ini['fontsize'] ?>;
}
スタイルシートのbody要素に設定ファイルから読み込んだ連想配列の値をそれぞれ割り当てています。確認
ソースを表示してみて、ちゃんと設定ファイル通りの値が入っていることを確認してください。その後、設定ファイルをいろいろと変更してみて、反映されるか確認してください。設定ファイルフォーム
フォーム上から設定ファイルに書き込むことができるようにします。プログラムの作成
以下のソースを入力してください。
<?php
$ini = parse_ini_file('config.ini');
if ($_POST['color']) $ini['color'] = $_POST['color'];
if ($_POST['bgcolor']) $ini['bgcolor'] = $_POST['bgcolor'];
if ($_POST['fontsize']) $ini['fontsize'] = $_POST['fontsize'];
$fp = fopen('config.ini', 'w');
foreach ($ini as $k => $i) fputs($fp, "$k=$i\n");
fclose($fp);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css">
body {
color: <?php print $ini['color'] ?>;
background-color: <?php print $ini['bgcolor'] ?>;
font-size: <?php print $ini['fontsize'] ?>;
}
</style>
<title>設定ファイルフォーム</title>
</head>
<body>
<form method="post" action="config3.php">
文字の色 <input type="text" name="color" value="<?php print $ini['color'] ?>"><br>
背景の色 <input type="text" name="bgcolor" value="<?php print $ini['bgcolor'] ?>"><br>
フォントの大きさ <input type="text" name="fontsize" value="<?php print $ini['fontsize'] ?>"><br>
<input type="submit" value="送信">
</form>
<p>
設定ファイルのテスト<br>
設定ファイルのテスト<br>
</p>
</body>
</html>
入力が終わったら「config3.php」というファイル名で保存し、サーバにアップしてください。その後、設定ファイルに書き込むことができるようにするために「config.ini」の属性変更をして「その他」の書込属性を許可しておいてください。その後、config3.php を実行します。ソースの解説
if ($_POST['color']) $ini['color'] = $_POST['color'];
if ($_POST['bgcolor']) $ini['bgcolor'] = $_POST['bgcolor'];
if ($_POST['fontsize']) $ini['fontsize'] = $_POST['fontsize'];
各入力フォームに値が入っていれば設定ファイルから読み込んだ連想配列の値を変更しています。
$fp = fopen('config.ini', 'w');
foreach ($ini as $k => $i) fputs($fp, "$k=$i\n");
fclose($fp);
設定ファイルを書き込み専用としてオープンし、「キー=値」の形式で連想配列の内容を書き込んでいます。foreach文は、連想配列 $ini の各要素についてキーを $k に、値を $i に代入してループを繰り返します。
文字の色 <input type="text" name="color" value="<?php print $ini['color'] ?>"><br>
背景の色 <input type="text" name="bgcolor" value="<?php print $ini['bgcolor'] ?>"><br>
フォントの大きさ <input type="text" name="fontsize" value="<?php print $ini['fontsize'] ?>"><br>
フォームに予め設定ファイルの内容が入るように、value属性に設定ファイルから読み込んだ値を設定しています。