Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] operacje na plikach ini
tenior
post
Post #1





Grupa: Zarejestrowani
Postów: 58
Pomógł: 2
Dołączył: 16.11.2008

Ostrzeżenie: (10%)
X----


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

Ten post edytował tenior 6.02.2010, 16:05:49
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
batman
post
Post #2





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




parse_ini_file, a potem już sobie poradzisz (podmiana w tablicy i zapisanie do pliku).
Go to the top of the page
+Quote Post
tenior
post
Post #3





Grupa: Zarejestrowani
Postów: 58
Pomógł: 2
Dołączył: 16.11.2008

Ostrzeżenie: (10%)
X----


to sobie nie radzi z dziwnymi znakami, więc odpada
Go to the top of the page
+Quote Post
batman
post
Post #4





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Co masz na myśli pisząc "dziwne znaki"? Z przykładem jaki podałeś, poradzi sobie bez najmniejszego problemu.
Go to the top of the page
+Quote Post
tenior
post
Post #5





Grupa: Zarejestrowani
Postów: 58
Pomógł: 2
Dołączył: 16.11.2008

Ostrzeżenie: (10%)
X----


tak wiem, nawet fajnie jak by dzialalo, ale jesli uzyje ! ~ itp to nie bedzie dzialalo jak nalezy
Go to the top of the page
+Quote Post
batman
post
Post #6





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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"
  }
}

Go to the top of the page
+Quote Post
tenior
post
Post #7





Grupa: Zarejestrowani
Postów: 58
Pomógł: 2
Dołączył: 16.11.2008

Ostrzeżenie: (10%)
X----


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)
Go to the top of the page
+Quote Post
Fifi209
post
Post #8





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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);
Go to the top of the page
+Quote Post
batman
post
Post #9





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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.
Go to the top of the page
+Quote Post
gothye
post
Post #10





Grupa: Zarejestrowani
Postów: 702
Pomógł: 65
Dołączył: 16.03.2009

Ostrzeżenie: (0%)
-----


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. }



Go to the top of the page
+Quote Post
tenior
post
Post #11





Grupa: Zarejestrowani
Postów: 58
Pomógł: 2
Dołączył: 16.11.2008

Ostrzeżenie: (10%)
X----


@batman nie moze byc cudzysłowów
reszta dziala, właśnie coś takiego szukałem.
Go to the top of the page
+Quote Post
batman
post
Post #12





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Z czystej ciekawości zapytam. Dlaczego nie może być cudzysłowów?
Go to the top of the page
+Quote Post
tenior
post
Post #13





Grupa: Zarejestrowani
Postów: 58
Pomógł: 2
Dołączył: 16.11.2008

Ostrzeżenie: (10%)
X----


program sie wtedy nie wlacza, dlaczego nie wiem
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 23:02