/var/log/masayoshi/masayoshi.life.log

とりあえず、書きたいこと書くだけ。

iniファイル編集インターフェースと書込ライブラリ



まずはインターフェースから、JavaScriptも使いますよ。


本体:ファイル名(ini_edit.php)



<?php
header("Content-type:text/html;charset=EUC-JP") ;

//設定ファイル呼出
$ini = parse_ini_file("ファイル名",t) ;

//HTML表示開始
echo <<<top
<html>
<head>
<title>ini editer</title>
<script src="ini_edit.js"></script>
</head>
<body>


<form action="get.php" method="post" name="props">
<input type="hidden" name="ini_file" value="index_css.ini">
<div id="input_method">
top;
$pos = 0 ;

//設定フォームの作成
foreach($ini as $method => $data){
$nom = 0 ;


//要素やクラス名のフォーム
echo <<<method
<div name="{$method}">
<input type="text" size="10" name="method" value="{$method}">{<br>
<div id="{$method}">
method;
//プロバティの入力
foreach($data as $key => $value){
echo <<<props
==><input type="text" size="15" name="css[{$pos}][{$nom}][key]" value="{$key}">:<input type="text" size="15" name="css[{$pos}][{$nom}][value]" value="{$value}">;<br>
props;
$nom++ ;
}

//プロバティpが無いときの対策
if($nom == 0){
$nom = 0 ;
}

//プロバティフォームの挿入
echo <<<method_end
<input type="hidden" id="{$method}_pos" value="{$pos}">
<input type="hidden" id="{$method}_size" value="{$nom}">
</div>}
<input type="button" name="insert_prop" value="要素追加" onClick="push_form('{$method}')"></div><hr>
method_end;
$pos++ ;
}
echo <<<selc

</div>
<input type="hidden" id="_pos" value="{$pos}">


<input type="text" id="ins_selc_name">:<input type="button" id="insert_selc" value="セレクタ追加" onclick="push_selc()"><br>


selc;
echo <<<end
<input type="submit">
</form>
</body>
</html>
end;
?>

JavaScript部:ファイル名(ini_edit.js)



document.write("<h1>ini_file editer</h1>") ;

function push_form(method){//プロパティの追加
/*データ取得*/
var pos = parseFloat(document.getElementById(method+"_pos").value) ;//データポジション
var sizes = parseFloat(document.getElementById(method+"_size").value) ;//属性の数

/*データ整形*/
var push_d = "==><input type=\"text\" size=\"15\" name=\"css[" + pos + "][" + sizes + "][key]\">" ;//プロバティ入力
push_d += ":<input type=\"text\" size=\"15\" name=\"css[" + pos +"][" + sizes + "][value]\" value=\"\">;<br>" ;//値の入力
document.getElementById(method).innerHTML += push_d ;

/*フォームに挿入*/
document.getElementById(method+"_size").value = sizes+1 ;
}

function push_selc(){//セレクタの追加
/*データ取得*/
var pos = parseFloat(document.getElementById("_pos").value) ;//データポジション
var methods = document.getElementById("ins_selc_name").value ;

/*挿入*/
var push_d = "<div name=" + methods + ">" +
"<input type=\"text\" size=\"10\" name=\"method\" value=\"" + methods + "\">{<br>"+
"<div id=" + methods + ">"+
"==><input type=\"text\" size=\"15\" name=\"css["+ pos + "][0][key]\" value=\"\">:"+
"<input type=\"text\" size=\"15\" name=\"css[" + pos + "][0][value]\" value=\"\">;<br>" +
"<input type=\"hidden\" id=\"" + methods + "_pos\" value=\"" + pos + "\">"+
"<input type=\"hidden\" id=\"" + methods +"_size\" value=\"1\">"+
"</div>}<input type=\"button\" name=\"insert_prop\" value=\"要素追加\" onClick=\"push_form('" + methods +"')\"></div><hr>" ;


document.getElementById("input_method").innerHTML += push_d ;

/*値の変更*/
document.getElementById("_pos").value = pos+1 ;
}

受け取り部:ファイル名(get.php)



<?php
require("ini_make.php") ;

/*インスタンス作成*/
$ini_make = new ini_make($_POST["ini_file"]) ;

/*要素、クラス名の特定*/
$pos = 0 ;
foreach($_POST["method"] as $method){
$css_i[$method] = $_POST["css"][$pos] ;
$pos++ ;
}


/*データ書込*/
$ini_make->ini_write($css_i) ;
?>

書込クラス:ファイル名(ini_make.php)



<?php
class ini_make{
var $ini_file ;
/*ファイルの指定*/
function ini_make($file){
$this->ini_file = $file ;
}


/*ファイル書き込み*/
function ini_write($datas){

$file_acc = @fopen($this->ini_file,"w") ;
flock($file_acc,LOCK_EX) ;

/*セクションの書込*/
foreach($datas as $sec => $c_data){
$writes = "[{$sec}]\n" ;
fputs($file_acc,$writes) ;
/*設定の書込*/
foreach($c_data as $prop){
/*内容によって処理の分岐*/
if($prop["key"] == "*"){


}elseif*1{
$inis = "{$prop[key]} = {$prop[value]} ;\n" ;
fputs($file_acc,$inis) ;
echo $inis."<br>" ;
}
}
}

flock($file_acc,LOCK_UN) ;
fclose($file_acc) ;

}
}
?>



まずは本体の説明から。


parse_ini_file("ファイル名",t) ;


今はCSS用の設定ファイルの作成をやっているからtを付けている。


これはセクションを意識して取得している、セクションとは設定ファイルの


[body]


この上の様な物の事だ、これがCSS用の設定ファイルでは重要な意味を持つ。


この中に要素やクラス名を入力する、その後にプロバティを入れる。


前に公開したプログラムにこの仕組みがある、今回のプログラムはそれをいじれることに注視した。




これは入力する時の話だが、左のフォームに「*」と入力したらどうなるか?


動作はini_make.phpのfunction ini_writeの中を見てほしい。


だが、動作は説明しない。


自分で確かめてほしい。


パーミッションの説明をしておこう。


俺の環境上での話だからあまりいえないが



  • ini_edit.php(644)

  • ini_edit.js(644)

  • get.php(777)

  • ini_make.php(777)

  • index_css.ini(644)


不安なのでかならず試してください


*1:$prop["key"] != "") || ($prop["value"] != ""