Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] operacje na plikach ini
Forum PHP.pl > Forum > Przedszkole
tenior
Problem polega na kilku tych samych ustawieniach
Kod
[Ustawienia]
Kod=275
Wzor=zmienny
[Poboczne]
Kod=438
Wzor=staly


Chodzi aby edytować kod i wzor ale jak widać w klamrach są inne znaczenia, czego użyć do takiej edycji?
str_replace mi tutaj za wiele nie pomoze, trzeba aby skrypt wiedział skąd bierze dana wartość czy z Ustawien czy z Pobocznych
batman
parse_ini_file, a potem już sobie poradzisz (podmiana w tablicy i zapisanie do pliku).
tenior
to sobie nie radzi z dziwnymi znakami, więc odpada
batman
Co masz na myśli pisząc "dziwne znaki"? Z przykładem jaki podałeś, poradzi sobie bez najmniejszego problemu.
tenior
tak wiem, nawet fajnie jak by dzialalo, ale jesli uzyje ! ~ itp to nie bedzie dzialalo jak nalezy
batman
Jak nie? Przecież działa:
  1. [sekcja]
  2. klucz1 = "wartosc"
  3. klucz2 = "!wartosc"
  4. klucz3 = "~wartosc"


  1. var_dump(parse_ini_file('plik.ini', true));


Wynik działania:
Kod
array(1) {
  ["sekcja"]=>
  array(3) {
    ["klucz1"]=>
    string(7) "wartosc"
    ["klucz2"]=>
    string(8) "!wartosc"
    ["klucz3"]=>
    string(8) "~wartosc"
  }
}

tenior
plik ini
Kod
[sekcja]
klucz1=~~ wartosc ~~
klucz2=!wartosc
klucz3=~wartosc

[sekcja2]
klucz1=wartosc !
klucz2=!wartosc
klucz3=~wartosc

[sekcja3]
klucz1= % wartosc
klucz2=!wartosc
klucz3=~wartosc


kod php
  1. var_dump(parse_ini_file('plik.ini', true));


wynik
Kod
Warning: Error parsing plik.ini on line 2 in /home/ventrilo/www/zlec/2/index.php on line 2
bool(false)
Fifi209
Coś takiego:

  1. $text = file('test.txt');
  2. $data = array();
  3.  
  4. foreach ($text as $value) {
  5. static $new_k;
  6. if (strpos($value, '[') !== false) {
  7. preg_match('#\[([^\]]+)\]#', $value, $matches);
  8. $new_k = $matches[1];
  9. }else{
  10. list($key, $value) = explode('=', $value);
  11. if (!empty($new_k)) {
  12. $data[$new_k][$key] = $value;
  13. }else{
  14. $data[][$key] = $value;
  15. }
  16. }
  17. }
  18.  
  19. echo '<pre>';
  20. print_r($data);
batman
Porównaj mój plik z Twoim plikiem ini i znajdź różnice. Jak je zastosujesz u siebie, nie będziesz dostawał błędów.
gothye
albo tak :

  1. function parse_ini_file($filename, $process_sections = false) 
  2. {
  3.           $ini_array = array();
  4.          $section = '';
  5.          $lines = file($filename);
  6.          foreach($lines as $line)
  7.          {
  8.                   $line = trim($line);
  9.  
  10.                   if($line == '' || $line[0] == ';' || $line[0] == '#')
  11.                            continue;
  12.  
  13.                   list($sec_name) = sscanf($line, "[%[^]]");
  14.  
  15.                   if( $sec_name )
  16.                            $section = trim($sec_name);
  17.                   else
  18.                   {
  19. list($property, $value) = sscanf($line, "%[^=] = '%[^']'");
  20. if ( !$property || !$value )
  21. {
  22. list($property, $value) = sscanf($line, "%[^=] = \"%[^\"]\"");
  23. if ( !$property || !$value )
  24. {
  25. list($property, $value) = sscanf($line, "%[^=] = %[^;#]");
  26. if( !$property || !$value )
  27. continue;
  28. else
  29. $value = trim($value, "\"'");
  30. }
  31. }
  32.  
  33. $property = trim($property);
  34. $value = trim($value);
  35.  
  36. if($process_sections)
  37. $ini_array[$section][$property] = $value;
  38. else
  39. $ini_array[$property] = $value;
  40. }
  41. }
  42.  
  43. return $ini_array;
  44. }



tenior
@batman nie moze byc cudzysłowów
reszta dziala, właśnie coś takiego szukałem.
batman
Z czystej ciekawości zapytam. Dlaczego nie może być cudzysłowów?
tenior
program sie wtedy nie wlacza, dlaczego nie wiem
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.