Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: System Aktualizacji.
Forum PHP.pl > Forum > PHP
my_key
Witam wszystkich.

Przystępuje do realizacji większego projektu i zastanawiam się nad paroma problemami.
Jednym z nich jest system aktualizacji.
Najpierw użytkownik musi sprawdzić czy ma aktualną wersje. Logując się do swojego panelu system musi pobrać informację o aktualnej wersji.
Nie chce zapisywać w każdej aplikacji dostępu do bazy danych ze względów bezpieczeństwa.
Uważam, że lepszym rozwiązaniem będzie pobranie kodu XML generowanego dynamicznie np: www.domena_projektu.pl/last_version_info.xml
Co o sądzicie o takim rozwiązaniu?

Kolejna sprawa to kwestia już aktualizacji plików.
W jaki sposób to wykonać?
Jak pobrać pliki przez PHP?
Jak je zapisać/podmienić w odpowiednich folderach? Wydaje mi się, że wystąpi problem z chmod dla folderów i plików.
Ma ktoś jakieś uwagi na ten temat?
A może ktoś się orientuje jak to jest realizowane w Wordpress'ie?
Helid
Po zalogowaniu do PA przez użytkownika skrypt pobiera np. przez file get contets zawartość www.domena_projektu.pl/last_version_info.php (po co w ogóle struktura xml to tylko 3-4 cyfry), skrypt usuwa kropki, ewentualne literki alfabetu zamienia na liczby a później porównuje. Jeżeli aktualna wersja jest mniejsza to pobiera dany plik (dostępny pod stałym adresem ala last_version.php) i przystępuje do instalacji.
Sephirus
Zgadzam się - XML zbędny. Dodałbym jeszcze do propozycji kolegi by skrypt/aplikacja mogła także odwołać się do drugiego pliku gdzie znajdzie listę plików do pobrania.

Co do sposobu pobrania plików to można to zrobić na faktycznie wieeele sposobów. Musisz zrobić coś na styl repozytorium dostępne z poziomu www czy to przez HTTP czy FTP. Następnie pobranie pików (file_get_contents, curl, fopen, czy nawet fsockopen tongue.gif) tyko musisz pamiętać, że jeśli ta aplikacja jest napisana w języku, który wykonuje się na serwerze (PHP) to pliki muszą być wrzucone tak by dały się pobrać a nie wykonywać.

Ciekawym rozwiązaniem jakie spotkałem, nie pamiętam już gdzie to aktualizacja w formie XML. Podczas wrzucania nowej wersji musi być skrypt który przerobi podany mu katalog wraz z zawartością na plik XML, w którym po kolei doda wszystkie pliki, wraz z ich nazwami i lokacjami. Taki plik XML potem jest łatwy do pobrania i aplikacja podczas aktualizacji przelatuje po tym pliku tworząc/nadpisując odpowiednie pliki z nowymi treściami. MINUS - nadaje się do małych "wagowo" aktualizacji.
my_key
Hmm no może i macie racje, po co się bawić z bazą danych, dynamicznym XML'em, zbędna praca.
Zastanawiam tylko nad tym jak pobierać i aktualizować tylko niezbędne pliki.
Może zapisywać na początku każdego pliku sumę kontrolną treści pliku (MD5). Później przy pobieraniu sprawdzamy pierwsze 32 znaki i jak się różni to pobieramy, jak nie to pomijamy.
Gra warta świeczki czy lepiej pobrać wszystko i zaktualizować?
Sephirus
Ok, opcję aktualizacji masz zawsze dwie smile.gif

1. Aktualizacja jako paczka
2. Aktualizacja jako lista

I teraz tak:

ad 1. Aktualizacja jako paczka polegała by na utworzeniu w serwisie paczki plików, które musza zostać zaktualizowane (dobre przy krytycznych aktualizacjach oraz takich gdzie jest dużo zależności). Czyli to w serwisie musi być paczka, program zasysa i podmienia pliki.

ad 2. Aktualizacja jako lista sprowadza się do przechowywania ZAWSZE najnowszych wersji wszystkich używanych plików. Program pobiera listę aktualizacji, lub sprawdza czy jego pliki nie są stare i pobiera te, które wg. siebie potrzebuje.

Obie opcje są tak samo porąbane ;P w 1 musisz generować paczki za to pobranie jest łatwe a w drugiej nie martwisz się paczkami ale za to ciężej znaleźć i zaktualizować wszystkie stare pliki...

Co do samego wersjonowania to zawsze można zrobić to najłatwiej jak się da smile.gif Wrzucasz nowy plik do "repozytorium" dostaje on wersję nr 1, nadpisujesz plik - ma już wersję nr 2, znowu nadpisujesz - ma wersję 3 itd... - to jeżeli byś robił według metody 1 gdzie plik to paczka plików.

W drugiej jest ciężej- tak jak wspomniałeś trzeba dać jakieś rozróżniki plików (np crc/md5) albo do aplikacji dołączyć liste plików z ich wersjami. Po aktualizacji lista ta też by się aktualizowała - sprawdzenie nowej listy czy jest taka jak stara nie powinno stanowić problemu.

A teraz moje zdanie - (czytaj jak ja bym to zrobił) smile.gif

najprościej! tongue.gif

Wrzucam wersję programu do samego programu. Program sprawdza czy jest paczka z wersją wyższą niż ma, pobiera, aktualizuje, aktualizuje swoją wersję i śmiga...

Jeden problem - Aktualizacja może być robiona niezależnie (to znaczy że paczka wersji 1.5.6 ma wszystkie zmiany z wersji poprzednich) lub zależnie (każda paczka ma tylko zmiany w stosunku do poprzedniej wersji - jak mam 1.5.3 to muszę po kolei aktualizować do 1.5.4, 1.5.5 i dopiero 1.5.6) - ja bym stawiał na niezależność wink.gif

HTH! wink.gif
Fifi209
Zainteresuj się PHAR, z pewnością ułatwi Ci to zadanie w tworzeniu paczek.
my_key
Ja też postawię na prostotę i niezależnośćsmile.gif

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