Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: elastyczny config
Forum PHP.pl > Forum > PHP
Van Pytel
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ź smile.gif
Fifi209
Na początek powinny wystarczyć pliki .ini zainteresuj się nimi
gorden
a może eval?
Shili
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 smile.gif
Van Pytel
@Shili, fakt błąd, to tylko przkład, ale takich błędów nie robie smile.gif
Plik .ini lub .php. No właśnie chciałbym w php, bo bardziej bezpieczniej niż w ini 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.
Shili
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ść 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.
alexandrus
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. ;*/
Van Pytel
Ok czytałem, ale to nie zmienia mojej sytuacji 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ć ">=".
Fifi209
parse_ini_file gotowa funkcja do parsowania

Co do zabezpieczenia, wrzuć nad public_html wink.gif ew. htaccess
Crozin
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. }
Van Pytel
@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ź.

Crozin
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.
Van Pytel
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.
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.