Hàm parse_ini_string() trong PHP

06/08/2020 - lượt xem
Chia sẻ
 
Rate this post

Định nghĩa.

Hàm parse_ini_string() sẽ lấy thông tin cấu hình từ chuỗi cấu hình truyền vào..

Cú pháp.

Cú pháp:

parse_ini_string ( string $ini [, bool $process_sections = FALSE [, int $scanner_mode = INI_SCANNER_NORMAL ]] ) : array

Trong đó.

  • $ini là chuỗi ini cần lấy thông tin.
  • $process_sections là tham số, mặc định là False, nếu mang giá trị là True, bạn sẽ có một mảng đa chiều bao gồm tên phần tử và các thiết lập.
  • $scanner_mode có thể là INI_SCANNER_NORMAL (mặc định) hoặc INI_SCANNER_RAW. Nếu mang giá trị INI_SCANNER_RAW, thì các giá trị tùy chọn sẽ không được phân tích cú pháp.

Giá trị trả về.

  • Hàm sẽ trả về một mảng chứa thông tin cấu hình nếu hàm chạy thành công. Ngược lại nếu chạy thất bại, hàm sẽ trả về False.

Ghi chú.

  • Lưu ý: Có những từ dành riêng không được sử dụng làm khóa cho các tệp ini. Chúng bao gồm: null, có, không, đúng, sai, bật, tắt, không có. Giá trị null, tắt, không và kết quả sai trong “” và các giá trị trên, có và kết quả đúng trong “1”, trừ khi chế độ INI_SCANNER_TYPED được sử dụng. Ký tự? {} | & ~! [() ^ “Không được sử dụng ở bất kỳ đâu trong khóa và có ý nghĩa đặc biệt trong giá trị.

Hàm liên quan.

Thông tin thêm.

  • Thay thế cho php_ini_opes () cho PHP trước 5.3 – sử dụng php_ini_file () và các luồng
    <?php
    if ( !function_exists( 'parse_ini_string' ) ) {
        function parse_ini_string( $string, $process_sections ) {
            if ( !class_exists( 'parse_ini_filter' ) ) {
                /* Define our filter class */
                class parse_ini_filter extends php_user_filter {
                    static $buf = '';
                    function filter( $in, $out, &$consumed, $closing ) {
                        $bucket = stream_bucket_new( fopen('php://memory', 'wb'), self::$buf );
                        stream_bucket_append( $out, $bucket );
                        return PSFS_PASS_ON;
                    }
                }
                /* Register our filter with PHP */
                stream_filter_register("parse_ini", "parse_ini_filter")
                or return false;
            }
            parse_ini_filter::$buf = $string;
            return parse_ini_file( "php://filter/read=parse_ini/resource=php://memory", $process_sections );
        }
    }
    ?>
  • parse_ini_opes_m là tương tự cho hàm parse_ini_opes. đã phải mã hóa chức năng này do thiếu php 5.3 trên một số hosting. parse_ini_opes_m: – bỏ qua các dòng nhận xét bắt đầu bằng “;” hoặc là “#” – bỏ qua các dòng bị hỏng không có “=” – hỗ trợ các giá trị mảng và các khóa giá trị mảng
    <?php
    function parse_ini_string_m($str) {
       
        if(empty($str)) return false;
    
        $lines explode("\n"$str);
        $ret = Array();
        $inside_section false;
    
        foreach($lines as $line) {
           
            $line trim($line);
    
            if(!$line || $line[0] == "#" || $line[0] == ";") continue;
           
            if($line[0] == "[" &amp;&amp$endIdx strpos($line"]")){
                $inside_section substr($line1$endIdx-1);
                continue;
            }
    
            if(!strpos($line'=')) continue;
    
            $tmp explode("="$line2);
    
            if($inside_section) {
               
                $key rtrim($tmp[0]);
                $value ltrim($tmp[1]);
    
                if(preg_match("/^\".*\"$/"$value) || preg_match("/^'.*'$/"$value)) {
                    $value mb_substr($value1mb_strlen($value) - 2);
                }
    
                $t preg_match("^\[(.*?)\]^"$key$matches);
                if(!empty($matches) &amp;&amp; isset($matches[0])) {
    
                    $arr_name preg_replace('#\[(.*?)\]#is'''$key);
    
                    if(!isset($ret[$inside_section][$arr_name]) || !is_array($ret[$inside_section][$arr_name])) {
                        $ret[$inside_section][$arr_name] = array();
                    }
    
                    if(isset($matches[1]) &amp;&amp; !empty($matches[1])) {
                        $ret[$inside_section][$arr_name][$matches[1]] = $value;
                    } else {
                        $ret[$inside_section][$arr_name][] = $value;
                    }
    
                } else {
                    $ret[$inside_section][trim($tmp[0])] = $value;
                }           
    
            } else {
               
                $ret[trim($tmp[0])] = ltrim($tmp[1]);
    
            }
        }
        return $ret;
    }
    ?>
    
    <?php
    $ini '
    
        [simple]
        val_one = "some value"
        val_two = 567
    
        [array]
        val_arr[] = "arr_elem_one"
        val_arr[] = "arr_elem_two"
        val_arr[] = "arr_elem_three"
    
        [array_keys]
        val_arr_two[6] = "key_6"
        val_arr_two[some_key] = "some_key_value"
    
    ';
    
    $arr parse_ini_string_m($ini);
    ?>
    Kết quả có thể là.
    Array
    (
        [simple] => Array
        (
            [val_one] => some value
            [val_two] => 567
        )
    
        [array] => Array
        (
            [val_arr] => Array
            (
                [0] => arr_elem_one
                [1] => arr_elem_two
                [2] => arr_elem_three
            )
        )
    
        [array_keys] => Array
        (
            [val_arr_two] => Array
            (
                [6] => key_6
                [some_key] => some_key_value
            )
    
        )
    
    )

Các bạn có thể xem chi tiết hơn trên php.net.

Hi vọng với bài viết này, bạn đã hiểu rõ ứng dụng của hàm parse_ini_string() trong PHP. Nếu bạn thấy bài viết hay và có ý nghĩa hãy like và chia sẻ bài viết này để mọi người cùng nhau học tập nhé. Cảm ơn các bạn đã ghé thăm codetutam.com

    Liên hệ với chúng tôi

    Để lại thông tin để nhận được các bài viết khác

    Rate this post

    Xem thêm nhiều bài tin mới nhất về Kiến thức

    Xem thêm