ini dosyası oluşturmak, PHP değerleri yazmak

6 Cevap php

Ben, kolayca bana yeni bir dosya oluşturmanızı sağlayan bir yol bulmak bir ini dosyası (kullanıcı başına için php.ini veya simiilar değil ... ayrı ini dosyası) gibi davranın ve PHP kullanarak değerleri silmek / oluşturamazsınız. PHP bir ini dosyası oluşturmak için kolay bir yol sunar ve değerlerini silme / okuma / yazma gibi görünüyor. Girdilerini oluşturarak veya tuşları / değerleri manipüle hakkında hiçbir şey - Şimdiye kadar, sadece "okumak" hepsi.

6 Cevap

PHP belgelerin yorumlardan kod pasajı aşağıdaki bulundu:

function write_ini_file($assoc_arr, $path, $has_sections=FALSE) { 
    $content = ""; 
    if ($has_sections) { 
        foreach ($assoc_arr as $key=>$elem) { 
            $content .= "[".$key."]\n"; 
            foreach ($elem as $key2=>$elem2) { 
                if(is_array($elem2)) 
                { 
                    for($i=0;$i<count($elem2);$i++) 
                    { 
                        $content .= $key2."[] = \"".$elem2[$i]."\"\n"; 
                    } 
                } 
                else if($elem2=="") $content .= $key2." = \n"; 
                else $content .= $key2." = \"".$elem2."\"\n"; 
            } 
        } 
    } 
    else { 
        foreach ($assoc_arr as $key=>$elem) { 
            if(is_array($elem)) 
            { 
                for($i=0;$i<count($elem);$i++) 
                { 
                    $content .= $key2."[] = \"".$elem[$i]."\"\n"; 
                } 
            } 
            else if($elem=="") $content .= $key2." = \n"; 
            else $content .= $key2." = \"".$elem."\"\n"; 
        } 
    } 

    if (!$handle = fopen($path, 'w')) { 
        return false; 
    } 
    if (!fwrite($handle, $content)) { 
        return false; 
    } 
    fclose($handle); 
    return true; 
}

Kullanımı:

$sampleData = array(
                'first' => array(
                    'first-1' => 1,
                    'first-2' => 2,
                    'first-3' => 3,
                    'first-4' => 4,
                    'first-5' => 5,
                ),
                'second' => array(
                    'second-1' => 1,
                    'second-2' => 2,
                    'second-3' => 3,
                    'second-4' => 4,
                    'second-5' => 5,
                ));
write_ini_file($sampleData, './data.ini', true);

İyi şanslar!

ARMUT sizin için özlem görev yapmak iki (birim test) paketleri var:

  • Config_Lite - İdeal Sadece istiyorsanız .ini dosya
  • Config - .php da okur ve .xml dosya

Doğrusu benim kendi yazma daha iyi test kodu kullanmak istiyorum.

Ben nasıl çalıştığını iyi için kefil olamaz, ama için dokümantasyon sayfasından standart bir PHP fonksiyonu değildir parse_ini_file() (i.e. write_ini_file tersi) uygulanması için bazı öneriler var { [(2)]}.

Sonra parse_ini_file döner ve modifiye yazmanız ilişkisel dizi değiştirmek - Sen write_ini_file bir dosyaya değerleri göndermek için kullanabilirsiniz parse_ini_file onları tekrar okumak ile geri dosyaya dizi write_ini_file.

Sizin için çalışır mı?

Bu kod bölümü içinde:

else { 
    foreach ($assoc_arr as $key=>$elem) { 
        if(is_array($elem)) 
        { 
            for($i=0;$i<count($elem);$i++) 
            { 
                $content .= $key2."[] = \"".$elem[$i]."\"\n"; 
            } 
        } 
        else if($elem=="") $content .= $key2." = \n"; 
        else $content .= $key2." = \"".$elem."\"\n"; 
    } 
} 

$ Anahtar2 $ anahtarının değiştirilmesi gerekir ya da. Ini boş anahtarları bulur

Ben bu sınıfı yararlı olabileceğini yazdı yukarıdaki cevaplara göre. PHP 5.3 için ancak kolayca önceki sürümleri için adapte edilebilir.

class Utils
    {
        public static function write_ini_file($assoc_arr, $path, $has_sections)
        {
            $content = '';

            if (!$handle = fopen($path, 'w'))
                return FALSE;

            self::_write_ini_file_r($content, $assoc_arr, $has_sections);

            if (!fwrite($handle, $content))
                return FALSE;

            fclose($handle);
            return TRUE;
        }

        private static function _write_ini_file_r(&$content, $assoc_arr, $has_sections)
        {
            foreach ($assoc_arr as $key => $val) {
                if (is_array($val)) {
                    if($has_sections) {
                        $content .= "[$key]\n";
                        self::_write_ini_file_r(&$content, $val, false);
                    } else {
                        foreach($val as $iKey => $iVal) {
                            if (is_int($iKey))
                                $content .= $key ."[] = $iVal\n";
                            else
                                $content .= $key ."[$iKey] = $iVal\n";
                        }
                    }
                } else {
                    $content .= "$key = $val\n";
                }
            }
        }
    }

Bunu kullanmak ve o iş gibi görünüyor

function listINIRecursive($array_name, $indent = 0)
{
    global $str;
    foreach ($array_name as $k => $v)
    {
        if (is_array($v))
        {
            for ($i=0; $i < $indent * 5; $i++){ $str.= " "; }
            $str.= " [$k] \r\n";
            listINIRecursive($v, $indent + 1);
        }
            else
        {
            for ($i=0; $i < $indent * 5; $i++){ $str.= " "; }
            $str.= "$k = $v \r\n";
        }
    }
 }

bir. ini dosyasına yazmak için metni döndürür