ini文件格式和读取

INI ”就是英文 “initialization”的头三个字母的缩写;当然INI file的后缀名也不一定是".ini"也可以是".cfg",".conf ”或者是".txt"

INI文件的格式很简单,最基本的三个要素是:parameters,sections和comments。

什么是parameters?

INI所包含的最基本的“元素”就是parameter;每一个parameter都有一个name和一个value,如下所示:

name = value

什么是sections ?

所有的parameters都是以sections为单位结合在一起的。所有的section名称都是独占一行,并且sections名字都被方括号包围着([ and ])。在section声明后的所有parameters都是属于该section。对于一个section没有明显的结束标志符,一个section的开始就是上一个section的结束,或者是end of the file。Sections一般情况下不能被nested,当然特殊情况下也可以实现sections的嵌套。

section如下所示:

[section]

什么是comments ?

在INI文件中注释语句是以分号“;”开始的。所有的所有的注释语句不管多长都是独占一行直到结束的。在分号和行结束符之间的所有内容都是被忽略的。

注释实例如下:

;comments text

当然,上面讲的都是最经典的INI文件格式,随着使用的需求INI文件的格式也出现了很多变种;

INI实例1:

test.ini

; 通用配置,文件后缀.ini
[common]

application.directory = APPLICATION_PATH  "/application"
application.dispatcher.catchException = TRUE


; 数据库配置
resources.database.master.driver = "pdo_mysql"
resources.database.master.hostname = "127.0.0.1"
resources.database.master.port = 3306
resources.database.master.database = "database"
resources.database.master.username = "username"
resources.database.master.password = "password"
resources.database.master.charset = "UTF8"


; 生产环境配置
[product : common]

; 开发环境配置
[develop : common]

resources.database.slave.driver = "pdo_mysql"
resources.database.slave.hostname = "127.0.0.1"
resources.database.slave.port = 3306
resources.database.slave.database = "test"
resources.database.slave.username = "root"
resources.database.slave.password = "123456"
resources.database.slave.charset = "UTF8"

; 测试环境配置
[test : common]

读取文件:

<?php

$config=parse_ini_file('./test.ini');

print_r($config);

测试打印:

$ php -f test.php
Array
(
    [application.directory] => APPLICATION_PATH/application
    [application.dispatcher.catchException] => 1
    [resources.database.master.driver] => pdo_mysql
    [resources.database.master.hostname] => 127.0.0.1
    [resources.database.master.port] => 3306
    [resources.database.master.database] => database
    [resources.database.master.username] => username
    [resources.database.master.password] => password
    [resources.database.master.charset] => UTF8
    [resources.database.slave.driver] => pdo_mysql
    [resources.database.slave.hostname] => 127.0.0.1
    [resources.database.slave.port] => 3306
    [resources.database.slave.database] => test
    [resources.database.slave.username] => root
    [resources.database.slave.password] => 123456
    [resources.database.slave.charset] => UTF8
)

INI实例2,多维数组:

env.conf

;应用程序配置
[application]
env=develop

[dblist]
dbtype[]=test
dbtype[]=dev
dbtype[]=v1
dbtype[]=release
dbtype[]=online

读取示例:

<?php

//第二个参数设置为true,读取多维数组
$config=parse_ini_file('./env.conf',TRUE);

print_r($config);

测试打印:

$ php -f test.php
Array
(
    [application] => Array
        (
            [env] => develop
        )

    [dblist] => Array
        (
            [dbtype] => Array
                (
                    [0] => test
                    [1] => dev
                    [2] => v1
                    [3] => release
                    [4] => online
                )

        )

)

JS读取ini文件

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="./js/jquery-2.1.0.min.js"></script>
</head>

<body>
    <input class="file" type="file" onchange="jsReadFiles(this.files)" />

    <script>
        //js 读取文件
        function jsReadFiles(files) {
            if (files.length) {
                var file = files[0];
                var reader = new FileReader();//new一个FileReader实例

                // if (/text+/.test(file.type)) {//判断文件类型,是不是text类型
                //     console.log('txt')
                //     reader.onload = function () {
                //         console.log(this.result)
                //         console.log(typeof this.result)
                //         $('body').append('<pre>' + this.result + '</pre>');
                //     }
                //     reader.readAsText(file);
                // } else if (/image+/.test(file.type)) {//判断文件是不是imgage类型
                //     console.log('image')
                //     reader.onload = function () {
                //         console.log(this.result)
                //         console.log(typeof this.result)
                //         $('body').append('<img src="' + this.result + '"/>');
                //     }
                //     reader.readAsDataURL(file);
                // }
                if (file.name.indexOf('.ini') != -1) {
                    console.log('ini')
                    reader.onload = function () {
                        console.log(this.result)

                        console.log(parseINIString(this.result))

                        console.log(typeof this.result)
                        $('body').append('<pre>' + this.result + '</pre>');
                    }
                    reader.readAsText(file);
                } else {
                    console.log('hhhh')
                }
            }
        }

        // http://www.manongjc.com/article/130183.html
        // http://www.gimoo.net/t/1907/5d23e1e9ab4e2.html
        // 本文实例讲述了JavaScript实现解析INI文件内容的方法。分享给大家供大家参考,具体如下:
        // .ini 是Initialization File的缩写,即初始化文件,ini文件格式广泛用于软件的配置文件。
        // INI文件由节、键、值、注释组成。
        // 根据node.js版本的node-iniparser改写了个JavaScript函数来解析INI文件内容,传入INI格式的字符串,返回一个json object。

        function parseINIString(data) {
            var regex = {
                section: /^\s*\s*([^]*)\s*\]\s*$/,
                param: /^\s*([\w\.\-\_]+)\s*=\s*(.*?)\s*$/,
                comment: /^\s*;.*$/
            };
            var value = {};
            var lines = data.split(/\r\n|\r|\n/);
            var section = null;
            lines.forEach(function (line) {
                if (regex.comment.test(line)) {
                    return;
                } else if (regex.param.test(line)) {
                    var match = line.match(regex.param);
                    if (section) {
                        value[section][match[1]] = match[2];
                        
                    } else {
                        value[match[1]] = match[2];
                    }
                } else if (regex.section.test(line)) {
                    var match = line.match(regex.section);
                    console.log(match)
                    value[match[0]] = {};
                    section = match[0];
                } else if (line.length == 0 && section) {
                    section = null;
                };
            });
            return value;
        }
    </script>
</body>

</html>

引用了文章:ini文件格式和读取 - 简书 

input[tyle="file"]样式修改及上传文件名显示

默认的上传样式我们总觉得不太好看,根据需求总想改成和上下结构统一的风格……

实现方法和思路:
  1.在input元素外加a超链接标签
  2.给a标签设置按钮样式
  3.设置input[type='file']为透明,并定位,覆盖在a上面

html代码:

<a class="input-file input-fileup" href="javascript:;">
         + 选择文件<input size="100" type="file" name="file" id="file">
</a>
<div class="fileerrorTip1"></div>
<div class="showFileName1"></div>

css代码: 

.input-file{
    display: inline-block;
    position: relative;
    overflow: hidden;
    text-align: center;
    width: auto;
    background-color: #2c7;
    border: solid 1px #ddd;
    border-radius: 4px;
    padding: 5px 10px;
    font-size: 12px;
    font-weight: normal;
    line-height: 18px;
    color:#fff;
    text-decoration: none;
}
.input-file input[type="file"] {
    position: absolute;
    top: 0;
    right: 0;
    font-size: 14px;
    background-color: #fff;
    transform: translate(-300px, 0px) scale(4);
    height: 40px;
    opacity: 0;
    filter: alpha(opacity=0);
 }

此时并不能显示上传的文件名,如需显示出上传的文件名需要js来处理

js代码:

<script>
        $(function(){
            $(".input-fileup").on("change","input[type='file']",function(){
                var filePath=$(this).val();
                if(filePath.indexOf("jpg")!=-1 || filePath.indexOf("png")!=-1){
                    $(".fileerrorTip1").html("").hide();
                    var arr=filePath.split('\');
                    var fileName=arr[arr.length-1];
                    $(".showFileName1").html(fileName);
                }else{
                    $(".showFileName1").html("");
                    $(".fileerrorTip1").html("您未上传文件,或者您上传文件类型有误!").show();
                    return false
                }
            })
        })
    </script>

 效果:

 摘自文章:input[tyle="file"]样式修改及上传文件名显示 - 走看看

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值