Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Automatyczny update aplikacji
treewood
post 30.12.2003, 22:15:20
Post #1





Grupa: Zarejestrowani
Postów: 215
Pomógł: 0
Dołączył: 18.01.2003

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


Jako twórca pewnej aplikacji internetowej mam pewien problem.
Zastanawiam się nad tym by zrobić automat do update'u.
Oczywiście wszystko jest piękne do czasu gdy w kodzie php (w klasach, metodach itd) nie pojawiają się pewne specyficzne metody, obliczenia.

Czy macie jakiś pomysł w jaki sposób oznaczyć kod tak by update dotyczył całej aplikacji oprócz pewnych "segmentów", które były zrobione specjalnie dla danego klienta (indywidualizacja?).

Proste to niby gdy mamy osobne metody specyficzne dla klienta i trzymame je w innej klasie/pliku/miejscu. Jednak gorzej jest gdy zmiany dotyczą już istniejących metod.

Myślałem by każdą instrukcję np. if else dzielić na jakieś bloki np.
[php:1:b25050b7fe]<?php
if(warunek){
realizacja
} #1#
#after 1
elseif(warunek){
specyficzna realizacja kodu. tego normalnie nie ma
}
#before 2
elseif(warunek){
realizacja
} #2#
else {
realizacja
} #3#
?>[/php:1:b25050b7fe]

Oczywiście to prymitywny przykład i łatwo tą sytuację rozwiązać. Chodzi mi jednak o sens.
W normalnym/standardowym kodzie części instrukcji elseif między #after 1 i #before 2 nie będzie i w czasie update musi być wiadome, że tam a nie gdzie indziej ten warunek musi być wstawiony/nieruszony.

Czy macie jakieś lepsze pomysły/doświadczenie?


--------------------
Działam w OpenSolution.org, autor Quick.Cms i Quick.Cart już od ponad 10 lat
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 17)
spenalzo
post 31.12.2003, 03:52:35
Post #2





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


Hmm... a nie najprostsze rozwiązanie?
Tworzysz sobie dwa pliki: w jednym ogolne klasy, funkcje itd, a w drugim takie specyficzne - przy update tylko podmieniasz pierwszy plik.


--------------------

Go to the top of the page
+Quote Post
treewood
post 31.12.2003, 08:29:36
Post #3





Grupa: Zarejestrowani
Postów: 215
Pomógł: 0
Dołączył: 18.01.2003

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


no to jest banalne rozwiazanie [; i o tym juz pisalem ... jednak czasem trzeba pogrzebac w kodzie, ktorego nie chce zmieniac bo coz ... mam jakas metode w klasie i ona cos realizuje (np. wyszukuje) i gdzies odwoluje sie do tej metody i teraz ... robi sie syf w przypadku gdy musialbym tworzyc nowa podobna metode (specyficzna dla klienta) poniewaz w wielu innych plikach odwoluje sie do tej metody i w ten sposob zmuszony bylbym do zmiany nie jednego pliku ale np. 5-10

tak samo tyczy sie to obliczen, dodawania do tabel itp.
dlatego by zrobic mniejszy chaos dokonuje zmian juz w istniejacych metodach i przy return po prostu jest inny wynik.


--------------------
Działam w OpenSolution.org, autor Quick.Cms i Quick.Cart już od ponad 10 lat
Go to the top of the page
+Quote Post
intol
post 31.12.2003, 11:31:24
Post #4





Grupa: Zarejestrowani
Postów: 110
Pomógł: 1
Dołączył: 29.07.2003

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


A gdyby tak zmieniać konkretne linijki w pliku? Np. 55 a wniej tylko echo"Skrypt": by było...
Jeszcze przydała by się mozliwość wstawiania nowych linijek między istniejące, sktypt poza tym musiał by mieć swoją wersję gdzieś zapisaną...


--------------------
Zbiór najlepszych technologicznych artykułów (programowanie, internet, linux)
Go to the top of the page
+Quote Post
treewood
post 31.12.2003, 12:09:25
Post #5





Grupa: Zarejestrowani
Postów: 215
Pomógł: 0
Dołączył: 18.01.2003

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


czyli 1 linijka = 1 czynnosc ?
wyjscie takze ale co w przypadku gdy sa roznice w liniach?
najwazniejsze przeciez jest to by skrypt nie wstawial tylko nowych linii ale by wstawial je w odpowiednie miejsca.

tak jak pisalem myslalem o specyficznych oznaczeniach kazdej funkcji/czynnosci/dzialania
tak by w latwy sposob latwo bylo sie znalezc w kodzie ale to tez troche utrudnia sprawe bo przeciez zmuszeni jestesmy do oznaczania wszystkiego co skrypt ma robic a komu by sie to chcialo?

chodzi tu o cos uniwersalnego co by mialo nawet szersze zastosowanie ...
a jesli nawet nie szersze to bynajmniej by sprawdzalo sie dobrze w konkretnym przypadku


--------------------
Działam w OpenSolution.org, autor Quick.Cms i Quick.Cart już od ponad 10 lat
Go to the top of the page
+Quote Post
Nalfein][WR
post 31.12.2003, 13:39:58
Post #6





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 22.04.2003
Skąd: Żory / K-ce

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


Najbardziej uniwersalne byłoby chyba parsowanie plików php. php ma wbudowany w siebie parser:

http://www.php.net/manual/pl/ref.tokenizer.php
http://www.php.net/manual/pl/tokens.php

Trzeba by "tylko" zaprogramować język w jakim dałoby się określić co należy zmienić (takie skrypty aktualizacyjne) np. jako dialekt XML-a. To by miało szerokie zastosowanie i można by tego użyć do np. implementacji systemu wersji w php coś jak CVS. Ale jest to trochę pisania i projektowania.


--------------------
Gadu-Gadu: 3909164
Go to the top of the page
+Quote Post
Cudi
post 31.12.2003, 17:24:37
Post #7


Administrator planeta/IRC


Grupa: Przyjaciele php.pl
Postów: 385
Pomógł: 0
Dołączył: 19.04.2003
Skąd: Zabrze

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


Podobny wątek był na forum webcity.php.pl, może wnioski i rozwiązania z tamtąd sie przydadzą:
:arrow: http://webcity.php.pl/forum/index.php?act=...t=ST&f=15&t=952


--------------------
"Programmers are in a race with the Universe to create bigger and better idiot-proof programs, while the Universe is trying to create bigger and better idiots. So far the Universe is winning."
Cudi's devBlog
Go to the top of the page
+Quote Post
GrayHat
post 1.01.2004, 01:36:39
Post #8





Grupa: Zarejestrowani
Postów: 566
Pomógł: 18
Dołączył: 23.08.2003
Skąd: Łomża

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


klasy inwidualne oznacz komentazami jakimis i przy aktualizacji pomijaj text miedzy tymi komentazami...
Go to the top of the page
+Quote Post
treewood
post 1.01.2004, 13:29:17
Post #9





Grupa: Zarejestrowani
Postów: 215
Pomógł: 0
Dołączył: 18.01.2003

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


grayHat << to juz bylo pisane. pestka jest to gdy robisz specjalne osobne moduly (klasy/metody) dla indywidualnego klienta i to wszystko po prostu wciskam do innego pliku to najlatwiej ... ale co gdy zmiana musi miec miejsce w kodzie oryginalnym tylko dlatego, ze do tego wlasnie kodu odwoluje sie z wielu innych miejsc np. obliczenie ceny brutto biorac pod uwage marze lub narzut, cene zakupu, stawke vat i upust (rabat).
regula jest niby taka sama ale jak widac klienci sa rozni i jeden juz wyskoczyl z pomyslem iz chce by to bylo wszystko inaczej obliczane ... to przyklad. takich zmian jest masa ...
problem tez gdy zmuszony jestem do stworzenia osobnej tabeli w SQL'u i zastosowania jej w juz istniejacych zapytaniach ... mozna by to rozwiazac albo tworzac wszystkie zapytania SQL od poczatku uwzgledniajac dodatkowa tabele albo zrobic w podzapytaniu inne zapytanie ... bynajmniej tu i tu wymagana jest juz ingerencja w oryginalny kod


--------------------
Działam w OpenSolution.org, autor Quick.Cms i Quick.Cart już od ponad 10 lat
Go to the top of the page
+Quote Post
radziel
post 2.01.2004, 09:48:49
Post #10





Grupa: Zarejestrowani
Postów: 103
Pomógł: 0
Dołączył: 25.04.2003
Skąd: Olsztyn

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


Najprostrze rozwiązania bywają najlepsze ...
Czy nie wystrarczy "Patcha" pisać normalnie jako plik txt, a jego zawartość niech będzie identyczna w strukturze jak pliki instalacji Modów do PHPbb?

np

Cytat
----[OPEN FILE: {PLIK}]-------
----[FIND: {JAKAS LINIJKA}]------
----[AFTER ADD]-------
{JAKIS KOD}
----[/AFTER ADD]------


Wydaje mi się że tego typu "aktualizacja" jest najprostrza...


--------------------
r.
Go to the top of the page
+Quote Post
intol
post 2.01.2004, 19:54:03
Post #11





Grupa: Zarejestrowani
Postów: 110
Pomógł: 1
Dołączył: 29.07.2003

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


A jest jakiś program który automatycznie wgrywa mody?


--------------------
Zbiór najlepszych technologicznych artykułów (programowanie, internet, linux)
Go to the top of the page
+Quote Post
radziel
post 5.01.2004, 15:52:25
Post #12





Grupa: Zarejestrowani
Postów: 103
Pomógł: 0
Dołączył: 25.04.2003
Skąd: Olsztyn

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


Cytat
A jest jakiś program który automatycznie wgrywa mody?


Wystarczy napisać "parser" do tego typu "kodu" który podałem wcześniej winksmiley.jpg


--------------------
r.
Go to the top of the page
+Quote Post
intol
post 5.01.2004, 20:04:38
Post #13





Grupa: Zarejestrowani
Postów: 110
Pomógł: 1
Dołączył: 29.07.2003

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


A może ktoś zna link do takiego paraser'a? Jeżeli byłby oficjalny (czy coś takiego 8) ), mógłbyś przy okazji podpatrzeć "jak oni to robią"... :wink:


--------------------
Zbiór najlepszych technologicznych artykułów (programowanie, internet, linux)
Go to the top of the page
+Quote Post
bumelang
post 5.01.2004, 23:55:24
Post #14





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 30.11.2003

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


Być może nie jest to odpowiedź na pytanie autora wątku, ale dyskusja schodzi dość jednoznacznie na przepisywanie w php bardzo starych i sprawdzonych narzędzi, które są w każdym unixopodobnym systemie i nazywają się diff i patch winksmiley.jpg (tudzież ich windowsowych i innych javowych odmian).

W szczególności nie rozumiem, Nalfein][WR, do czego miałoby prowadzić przepisanie korzystających z tych dwóch - będących standardem - rozwiązań w php.
Go to the top of the page
+Quote Post
eXtreme
post 6.01.2004, 17:30:34
Post #15





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 14.06.2002

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


heh... mój brat (Zyx z webcity[.php].pl) w swoim enginie stron www (http://fillarws.sourceforge.net) zrobił taki bajer z patchami że wystarczy zrobić plik patrzujący który wygląda mniej więcej tak:
[php:1:3cb0141db9]c|This is a sample patch file!
g|37
-| private $session_id;
-| var $session_user;
-| var $session_ip;
+| var $session_id;
+| private $session_user;
+| private $session_ip;
| var $session_browser;
-| var $session_page;
+| private $session_page;
g|51
+| // Main constructor
+| // calls init_session();
g|70
-| $sql -> sql_query('UPDATE users, sessions SET user_lastvisit = sessions.session_time WHERE sessions.session_time < '.(time() - fws::$config -> SESSION_TIME));
-| $sql -> sql_query('DELETE FROM sessions WHERE session_time < '.(time() - fws::$config -> SESSION_TIME));
c|***************
c|* Let's add something to the session init
c|***************
f| $this -> session_type = $session_type;
+| $this -> session_bizi = 19;
g|196
+| // elele
+| // elele
e|[/php:1:3cb0141db9]
c - komentarz patcha
- - usunięcie linijki
+ - dodanie linijki
- (spacja) pozostawienie linijki tak, jak jest
g - idź do linii XXX
f - znajdź linię
e - zakończ patch

Dzięki takiej konstrukcji możeliwe jest też łatwe odinstalowanie patcha, ponieważ interpreter zamienia sobie funkcjami + i - i plik powraca do pierwotnej formy.
Go to the top of the page
+Quote Post
radziel
post 6.01.2004, 18:28:36
Post #16





Grupa: Zarejestrowani
Postów: 103
Pomógł: 0
Dołączył: 25.04.2003
Skąd: Olsztyn

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


@eXtreme: mawet sobie ściągnełem ten "framework" niestety nie mogę znaleźć parsera odpowiedzialnego za przetworzenie tego pliku...
PS. Czy mogę wykorzystać w swoim projekcie klase do obsługi szablonów... // nie moge znaleźć gg Zyx'a :/


--------------------
r.
Go to the top of the page
+Quote Post
eXtreme
post 6.01.2004, 20:30:30
Post #17





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 14.06.2002

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


engine/filesystem.php
metoda: patch_file();

ps. tu od zyxa messag: "FWS to nie jest framework smile.gif. Projekt jest open-source (GNU GPL), więc jak zaznaczysz, że to moja klasa, to nie ma sprawy. GG mojego w necie raczej nie znajdziesz".
Go to the top of the page
+Quote Post
a1internet
post 11.01.2004, 23:20:17
Post #18





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 11.01.2004
Skąd: Gdynia

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


Cytat
Czy macie jakiś pomysł w jaki sposób oznaczyć kod tak by update dotyczył całej aplikacji oprócz pewnych "segmentów", które były zrobione specjalnie dla danego klienta (indywidualizacja?).


Myślę, że tą kwestię najlepiej rozwiązać na poziomie architektury samej aplikacji. W końcu to wręcz podręcznikowa sytuacja, w której warto zastosować programowanie obiektowe. Chcesz wyświetlić indeks newsów w serwisie. Piszesz klasę PageNewsIndex wykorzystującą szablon Page/NewsIndex.html i korzystającą z klasy News.php (obsługującej odczyt danych z tabeli "news" w bazie danych albo innego źródła).

Jeśli chcesz dopisać nowe funkcje specjalnie dla konkretnego klienta, to tworzysz klasę PageNewsIndexKonkretnyKlient bazującą na PageNewsIndex, rozszerzającą już napisane lub dodającą nowe metody.

Wystarczy teraz umieścić obie klasy w innych katalogach i możesz uaktualniać PageNewsIndex do woli, a u klienta wyświetlanie newsów będzie wciąż działało tak jak sobie zażyczył.

Często nie trzeba nawet tworzyć nowej klasy, wystarczy zastosować inny szablon.

Na tej właśnie zasadzie (w duużym skrócie) opiera się nasz system A1 Framework.


--------------------
Michał Jaskólski
A1 Internet // inżynierowie infostrady // http://www.a1.pl
:: płatne wsparcie techniczne dla PHP, MySQL i Apache
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 16:14