Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> elastyczny config
Van Pytel
post
Post #1





Grupa: Zarejestrowani
Postów: 150
Pomógł: 6
Dołączył: 3.03.2010

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


Załóżmy, że mam taki kod:

  1. if $user['pkt'] >= 1
  2. jakiś tam kod wykonuje się.


Ale ja chciałbym bardziej uelastycznić ten warunek głownie mi chodzi o to:
  1. if $user['pkt'] >= 1


chciałbym zrobić taki config który mam wypisany w jednym pliku, i z poziomu strony mógłbym go zmieniać, np z 1 na 2, albo jest mniejszy od 3 itp.

Myślałem o tablicach:

  1. $config = (
  2. 'pkt' => "1".
  3. 'wartosc' => ">=",
  4. );


No i właśnie i tutaj problem, bo jak zamienić 'wartosc' => ">=" tak aby php wiedział, że to ma być >= 1?
Zmienie zdanie i w configu przedstawiam na <=, a kod php sam już to rozpoznaje.

Ogólnie mówiąc "warunki" konfiguracji chce zebrać w jednym pliku (lub w bazie), i mogę zmieniać to na jednej stronie przez formularz, a nie edytować każdy plik (jeśli to by było w kilku plikach).

Mam nadzieje, że jakoś to jasno wytłumaczyłem.
Macie na to jakiś pomysł?

Dzięki za odpowiedź (IMG:style_emoticons/default/smile.gif)

Ten post edytował Van Pytel 16.12.2011, 00:30:53
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
Fifi209
post
Post #2





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

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


Na początek powinny wystarczyć pliki .ini zainteresuj się nimi
Go to the top of the page
+Quote Post
gorden
post
Post #3





Grupa: Zarejestrowani
Postów: 486
Pomógł: 101
Dołączył: 27.06.2010

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


a może eval?
Go to the top of the page
+Quote Post
Shili
post
Post #4





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Nie, nie, nie.
Eval jest zły (http://php.webtutor.pl/pl/2011/04/19/zastepcy-eval-w-php-czyli-jak-szybciej-zrobic-sobie-cos-zlego/) i nie powinno się go używać tam, gdzie możliwe są alternatywy.
.ini czy zwykłe pliki .php są o wiele lepszym rozwiązaniem.

@Van Pytel
Natomiast dodatkowa uwaga do kodu:
Niepoprawnie:
  1. if $user[pkt] >= 1


Poprawnie:
  1. if $user['pkt'] >= 1


chyba że zdefiniowałeś sobie stałą pkt oczywiście (IMG:style_emoticons/default/smile.gif)

Ten post edytował Shili 16.12.2011, 00:05:20
Go to the top of the page
+Quote Post
Van Pytel
post
Post #5





Grupa: Zarejestrowani
Postów: 150
Pomógł: 6
Dołączył: 3.03.2010

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


@Shili, fakt błąd, to tylko przkład, ale takich błędów nie robie (IMG:style_emoticons/default/smile.gif)
Plik .ini lub .php. No właśnie chciałbym w php, bo bardziej bezpieczniej niż w ini (IMG:style_emoticons/default/smile.gif)
Ale jak zrobić takowy kod? Bo nie mam pomysłu, jakbym wiedział jak to zaczepić może być coś wymyślił.
eval na dzień dobry odpada.

Ten post edytował Van Pytel 16.12.2011, 00:33:41
Go to the top of the page
+Quote Post
Shili
post
Post #6





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Zazwyczaj pliki .ini przez serwery są traktowane w taki sam sposób jak .php, więc powinny być równie bezpieczne. A jak nazwa wskazuje są specjalnymi plikami konfiguracyjnymi.

Możesz zawsze sprawdzić na swoim serwerze, czy wyświetli się ich treść (IMG:style_emoticons/default/smile.gif)

Zapoznaj się z tematem - jest miły i przyjemny, w dodatku właśnie do tego, czego szukasz.

Natomiast na .php będą to zapewne zbiory stałych.
Go to the top of the page
+Quote Post
alexandrus
post
Post #7





Grupa: Zarejestrowani
Postów: 7
Pomógł: 2
Dołączył: 29.11.2009

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


Poza tym zawsze można plikowi .ini dać rozszerzenie .php a przed wyświetleniem zawartości zabezpieczyć się np. tak:
  1. ;<?php /*
  2.  
  3. blabla=345
  4.  
  5. ;*/
Go to the top of the page
+Quote Post
Van Pytel
post
Post #8





Grupa: Zarejestrowani
Postów: 150
Pomógł: 6
Dołączył: 3.03.2010

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


Ok czytałem, ale to nie zmienia mojej sytuacji (IMG:style_emoticons/default/sad.gif)
Szukałem w google i są przykłady, ale połączenia z bazą lub ftp.
Po ini jest przekształcane do tablicy, ale jak wykonać wartość z tablicy aby php potraktował dosłownie. Wiem jak to wykonać na stringach, ale nie wiem jak zastosować ">=".
Go to the top of the page
+Quote Post
Fifi209
post
Post #9





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

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


parse_ini_file gotowa funkcja do parsowania

Co do zabezpieczenia, wrzuć nad public_html (IMG:style_emoticons/default/wink.gif) ew. htaccess
Go to the top of the page
+Quote Post
Crozin
post
Post #10





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Utwórz sobie funkcję sprawdzającą wybraną (nie)równość dla dwóch wartości:
  1. function compare($a, $b, $operator) {
  2. switch ($operator) {
  3. case '==': return $a == $b;
  4. case '>=': return $a >= $b;
  5. case '<': return $a < $b;
  6. ...
  7. default: throw new InvalidArgumentException('Invalid operator');
  8. }
  9. }
  10.  
  11. // następnie
  12.  
  13. if (compare($user['pkt'], 2, '>=')) {
  14. // ...
  15. }
Go to the top of the page
+Quote Post
Van Pytel
post
Post #11





Grupa: Zarejestrowani
Postów: 150
Pomógł: 6
Dołączył: 3.03.2010

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


@Fifi209 samo parsowanie mi nie daje.
@Crozin dzięki fajny sposób, też o tym myślałem, ale miałem nadzieje, że istnieje jakaś funkcja lub sztuczka która pozwala to zrobić bez własnych funkcji.

A macie może jakiś pomysł, jak zrobić kilka warunków?

  1. if ($user['pkt'] >|| $user['wiek'] > 25 && $user['xyz'] = 'blablabla' )


Chodzi też o to, że tak naprawdę w kodzie nie wiadomo jakie wymagania będą. Te wymagania będą ustalone w configu.
Bo raz może to pojawić się (wiek), a albo tylko (xyz i pkt) itd.

Dzięki za odpowiedź.

Go to the top of the page
+Quote Post
Crozin
post
Post #12





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Jeżeli warunki logiczne są stałe wystarczy całość zapisać jako:
  1. if (compare($user['pkt'], 25, '>') && comapre($user['xyz'], 'blablabla', '=='))
Jeżeli zaś całość ma być w pełni konfigurowalna z poziomu jakiegoś panelu administracyjnego (tworzenie całej konstrukcji IF-a) rozważyłbym tu stworzenie jakiejś fabryki, gdzie na podstawie danych z bazy danych dodawałbyś kolejne elementy konstrukcji IF-a.
Go to the top of the page
+Quote Post
Van Pytel
post
Post #13





Grupa: Zarejestrowani
Postów: 150
Pomógł: 6
Dołączył: 3.03.2010

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


No właśnie się zastanawiam czy to zrobić każdą funkcję dla danego dodatku strony (np, rejestracji, wyglądu strony itp) - ale zbyt dużo funkcji. Dlatego ten pomysł odpada.
Wszystko znowu się rozchodzi o te warunki logiczne (&&) - następny warunek. Bo myślałem też tak jak Ty piszesz, że funkcja + warunki.
Albo opcja trzecia, zrobić jedną funkcję + if, dane wejściowe do funkcji podaje np całą tablice z configiem. Ale tu mam problem z warunkiem AND, bo nie ma problemu z OR bo jeśli if natrafi na true to zwraca wartość i kończy funkcję. Ale co jeśli muszą być spełnione dwa warunki. Co jeśli będę miał miał AND X2 i OR jednocześnie. I tutaj nie mam na to pomysłu.
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: 22.08.2025 - 19:45