| HOME | FrontPage | 記事編集 | RSS |
configファイルの読み書き PHP::5
PHPのclassに慣れるネタが無かったので、設定ファイルの読込クラスを作ってみた。
<?php
class Config {
public $cnf = array();
function Config() {
$lines = file('config.txt');
foreach($lines as $line) {
list($name,$value) = split("=", $line,2);
if($name != '') $conf[$name] = rtrim($value,"\r\t\n");
}
$this->cnf = $conf;
}
}
$obj = new Config();
print $obj->cnf['a'] . "<br>\n";
print $obj->cnf['b'] . "<br>\n";
print $obj->cnf['c'] . "<br>\n";
?>
上のスクリプトは設定ファイルconfig.txtを一度だけ読み込んで連想配列$cnfに保存し、インスタンス$obj経由で値を参照するスクリプトです。PHP4ではclass名と同名のfunctionは勝手にコンストラクタと認識され、new時に一度だけ実行されます。ちなみにPHP5ではfunction __construct()がコンストラクタ(デストラクタは__destruct()。PHP4はデストラクタ無し)となり、両方ある場合はPHP4方式のコンストラクタが無視されます。config.txtの内容が
a=1000
b=2000
c=3000
の時、表示は
1000<br>
2000<br>
3000<br>
となります。$cnfの内容をconfig.txtに保存するfunctionを追加すれば、なかなか優秀な設定管理クラスになります。この程度なら単なる参照なので、オブジェクト指向とは言わないでしょう。僕が日頃イヤだと言ってるオブジェクト指向はもっと過激なものです。
1. configファイルの上書き保存
書き込み機能を足したConfigクラスが以下です。
class Config {
public $cnf = array();
private $filename = 'config.txt';
function Config() {
$lines = file($this->filename);
foreach($lines as $line) {
list($name,$value) = split("=", $line);
if($name != '') {
$conf[$name] = rtrim($value,"\r\t\n");
}
}
$this->cnf = $conf;
}
function overWrite() {
$fh = fopen($this->filename, 'wb');
foreach($this->cnf as $key => $value) {
fwrite($fh, "$key=$value\n");
}
fclose($fh);
}
function __destruct() {
unset($this->cnf);
}
}
現在の$cnfの内容を丸々config.txtに上書き保存します。
下の呼び出しはconfig.txtのa=1000をa=7000に書き換えて上書き保存します。
$obj = new Config();
$obj->cnf['a'] = 7000;
$obj->overWrite();
unset($obj);
最後にインスタンスを破棄します。ついでにファイル名の指定箇所が複数になったのでprivateで$filenameを作ってみた。クラス外から
print $obj->filename;
などとするとFatal errorになります。
2. configファイル名の指定
下の改造版はconfigファイル名を指定できます。
指定があればそのファイル名、指定が無ければconfig.txtを更新します。
class Config {
public $cnf = array();
function Config($filename = 'config.txt') {
$lines = file($filename);
foreach($lines as $line) {
list($name,$value) = split("=", $line);
if($name != '') {
$conf[$name] = rtrim($value,"\r\t\n");
}
}
$this->cnf = $conf;
}
function overWrite($filename = 'config.txt') {
$fh = fopen($filename, 'wb');
foreach($this->cnf as $key => $value) {
fwrite($fh, "$key=$value\n");
}
fclose($fh);
}
function __destruct() {
unset($this->cnf);
}
}
たとえば以下の呼び出しを受けた時、
$obj = new Config();
$obj->cnf['a'] = 6000;
$obj->overWrite('config2.txt');
print $obj->cnf['a'] . "<br>\n";
print $obj->cnf['b'] . "<br>\n";
print $obj->cnf['c'] . "<br>\n";
1行目のnew時はファイル名の指定が無いのでconfig.txtを参照します。
3行目のoverWrite時はファイル名の指定があるので指定されたconfig2.txtを更新します。
speed
/ 2008.02.11 00:28
BBSWiki ver.1.50 Final blogmode.
Copyleft (!C) 2005-2007 SUICIDE BLONDE JP.
All Lefts Reserved.
- 2008 Recent 50 Entries
- Windows Vista x64
2008.12.31 19:50 - 性格が良いor悪い
2008.12.30 02:45 - PC-MDVD/U2
2008.12.28 02:25 - USBメモリ5GBあたり\1,000
2008.12.25 22:10 - 植田佳奈叩かれる
2008.12.24 22:29 - 哲学熱再燃
2008.12.23 03:30 - Cha-la Head Cha-la
2008.12.21 13:47 - 紅第6巻
2008.12.17 02:19 - 民団、民主・公明支援へ
2008.12.16 03:30 - 口論における男性の勝率
2008.12.15 00:14 - 本業の話
2008.12.14 23:15 - 鉄拳王になったよー
2008.12.13 18:34 - やっぱりuse warningsを使おう
2008.12.11 23:02 - WinningEleven 2009 (PS3)
2008.12.03 20:31 - Ishkur's Guide to Electronic Music
2008.11.30 21:35 - ゲームも必要
2008.11.30 15:41 - UbuntuWWWサーバのセットアップ
2008.11.29 22:14 - らき☆すたOVA
2008.11.28 01:58 - Ubuntuデスクトップ用.vimrc
2008.11.27 22:02 - キーボードを水洗い
2008.11.25 01:33 - よりよい世界をMakeするために
2008.11.23 13:07 - だいぶ疲れも取れたようです
2008.11.20 08:56 - HDMI接続
2008.11.14 00:59 - またモニタ買った
2008.11.12 04:41 - うちの平尾がやりおった!!
2008.11.09 21:32 - ワイヤレスキーボード買った
2008.11.06 23:01 - PS3その後
2008.11.04 22:59 - PS3でかすぎ
2008.10.31 09:22 - ゲームばっかり!!111
2008.10.29 09:10 - 1$92yen
2008.10.27 23:29 - ヒアドキュメント中のハッシュ要素
2008.10.26 15:27 - 女性差別
2008.10.25 23:08 - 鉄拳5サウンドトラック
2008.10.24 04:11 - 新blogやることありすぎ
2008.10.22 00:39 - 鉄拳 DarkResurrection (PSP)
2008.10.20 00:08 - Linuxだけで足りるかも
2008.10.18 23:25 - PS3予約した
2008.10.18 00:26 - Firefox使えない
2008.10.17 23:18 - XML+XSL+Microformats
2008.10.17 00:59 - Minibuffer+AutoPagerize+LDRize
2008.10.15 22:52 - 心の余裕
2008.10.15 01:47 - IPパケットからWEPキーを抽出
2008.10.14 22:45 - Fedora Core4の壁紙
2008.10.13 19:29 - Fedoraマジおすすめ
2008.10.13 17:26 - 新サーバ構築中
2008.10.11 23:18 - 『安心ネットづくり』促進協議会
2008.10.09 22:42 - サーバ/インフラを支える技術
2008.10.09 20:57 - 田中理恵エロすぎ
2008.10.06 23:03 - 翻訳法人
2008.10.05 13:42 - ObjectDriver使えねえ。。
2008.10.02 22:39
- Archive
- 2006年
- 2006年01月
- 2006年02月
- 2006年03月
- 2006年04月
- 2006年05月
- 2006年06月
- 2006年07月
- 2006年08月
- 2006年09月
- 2006年10月
- 2006年11月
- 2006年12月
- 2007年
- 2007年01月
- 2007年02月
- 2007年03月
- 2007年04月
- 2007年05月
- 2007年06月
- 2007年07月
- 2007年08月
- 2007年09月
- 2007年10月
- 2007年11月
- 2007年12月
- 2008年
- 2008年01月
- 2008年02月
- 2008年03月
- 2008年04月
- 2008年05月
- 2008年06月
- 2008年07月
- 2008年08月
- 2008年09月
- 2008年10月
- 2008年11月
- 2008年12月