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"] != ""