Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Skrypt sprawdzania aktualizacji
Forum PHP.pl > Forum > Przedszkole
Maxik
Piszę CMS, więc napisałem skrypt który teoretycznie powinien sprawdzić czy na moim serwerze jest dostępna nowsza wersja i jeśli tak powiadomić o tym usera. Jako, że sam CMS ma działać na jak największej liczbie serwerów zrezygnowałem całkowicie z wysokopoziomowych funkcji obsługi plików na rzecz fopen, funkcja sprawdzająca wygląda tak:
  1. <?php
  2. function check_update(){
  3.        $h = @fopen('http://maxik.netmark.pl/miniCMS/currentver.php', 'r');
  4.        if(!$h){
  5.            $this->warning('Sprawdzanie aktualizacji zakończone niepowodzeniem, możliwe powody:<br />• ustawienia serwera nie pozwalają na łączenie się ze zdalnym serwerem<br />• serwer aktualizacji jest wyłączony');
  6.        } else{
  7.            $serversion = fread($h, 100);
  8.            if(version_compare($serversion, $this->get('version'), '>')){
  9.                $this->warning('Dostępna jest nowa wersja skryptu('.$serversion.'), zalecana jest aktualizacja do najnowszej wersji. Więcej informacji znajdziesz na <a href="#">stronie projektu</a>');
  10.            }
  11.        }
  12.    }
  13. ?>

I mam następujące pytania: Czy lepiej użyć fsockopen zamiast fopen(tak aby działało niezależnie od dyrektywy allow_url_fopen)? No i oczywiście czy ta metoda zadziała?
Riklaunim
masz też file_get_contents, jeżeli zastosujesz dokument XML to i simplexml_load_file.
Maxik
Cytat
zrezygnowałem całkowicie z wysokopoziomowych funkcji obsługi plików


Czytaj ze zrozumieniem, file_get_contents jest wysoko poziomowe.
gox
Cale php jest wysokopoziomowe smile.gif
mike
~Maxik dwie rzeczy:
1. Nie używaj słów, których znaczenia nie rozumiesz (wysokopoziomowe);
2. Pisz jak człowiek pod PHP5 z wykorzystaniem wszystkich możliwości. Każde inne rozwiązanie to strzał we własne kolano.
gox
Na fopen rzeczywiscie masz wieksza przenosnosc...
przynajmniej teoretycznie, bo watpie zeby istnial serwer pozwalajacy na fopen i jednoczenie nie pozwalajacy na fsockopen
Przy fsocku masz wiecej roboty, musisz odzielic naglowek http.. chyba ze uzywasz XML'a (powinienes) to wtedy nie.
Socket Timeout'u nie ustawisz ani na fsock, ani na fopen, ani na file_get_content, nawet default_socket_timeout nie dziala...
Dopiero na prawdziwych soketach masz mozliwosc ustawienia timeoutu.

A czy nie lepiej by bylo... sprawdzac aktualizacje ajaxem? smile.gif
Przeciez i tak cms nie bedzie sie sam aktualizowal, realizowanie sprawdzania wersji po stronie serwera jest wiec bez sensu.

Troszenke zmienilem twoj kodzior

  1. <?php
  2. function check_update() {
  3.    if ( false === $h = @fopen('http://maxik.netmark.pl/miniCMS/currentver.php', 'r')) {
  4.        $this->warning('Sprawdzanie aktualizacji zakończone niepowodzeniem, możliwe powody:<br />• ustawienia serwera nie pozwalają na łączenie się ze zdalnym serwerem<br />• serwer aktualizacji jest wyłączony');
  5.        return false;
  6.    $serversion = fread($h, 100);
  7.    if ( version_compare($serversion, $this->get('version'), '>')) {
  8.        $this->warning('Dostępna jest nowa wersja skryptu('.$serversion.'), zalecana jest aktualizacja do najnowszej wersji. Więcej informacji znajdziesz na <a href="#">stronie projektu</a>');
  9.        return true;
  10.    }
  11.    return false;
  12. }
  13. ?>
Maxik
mike:
1. Tak te funkcje były nazwane w książce z którą zaczynałem naukę PHP i tak mi zostało, funkcje te nie działają np. na yoyo.pl
2. Klasy mam narazie w PHP4, ale planuję przepisać je na PHP5(zresztą tak jak pisałem system ma działać na jak największej liczbie serwerów, a nie wszyscy mają dostępne PHP5, to z kolei jest kompatybilne wstecz)

gox:
Dzięki za odpowiedź.
gox
Wiec rob na ajaxie ;p
Maxik
Nie zrobię na ajaxie, bo ajaxem mogę się połączyć tylko z serwerm na którym jest ajax wrzucony, inaczej jest błąd 403 Forbidden
Cysiaczek
Jaka to książka - tak z ciekawości, żebym wiedział czego nie polecać tongue.gif
PHP4 już nie ma. Nikt już nie pisze kodu na php4 chyba, że jest hobbystą-masochistą.
W tym przypadku popieram kolegów proponujących ajax. Zawsze możesz puścić 2 żądania:
1. Sprawdzenie czy są aktualizacje
2. Instalacja aktualizacji, jeśli taką online udostępnisz smile.gif

Pozdrawiam

--edit
A to prawda - nie zrobisz tak smile.gif
Polecam w takim razie file_get_contents() i proste 0 lub 1 na wyjściu. (a ajaxowo możesz zaprezentować)
Ta funckja nie jest "wysokopoziomowa" i jest standardowo w php5. Nie możesz zakładać działania na jak największej liczbie serwerów z kilku powodów.
1. To serwer ma być dostosowany do aplikacji
2. Tak rozumiany uniwersalny kod jest trudny w utrzymaniu.
3. Ze względu na pkt.2 większość osób odrzuci Twój CMS, bo więcej zapłacą za jego ewentualne modyfikacje niż za normalny serwer z normalną obsługą php5. (50 zł/rok ?)
gox
Cytat(Maxik @ 26.10.2008, 14:17:00 ) *
ajaxem mogę się połączyć tylko z serwerm na którym jest ajax wrzucony, inaczej jest błąd 403 Forbidden


Say what?
Co to znaczy "ajax wrzucony" ajax to czesc jezyka JavaScript ktory jest w kazdej przegladarce... zaden ajax nie musi byc "wrzucony" nigdzie...
Maxik
PHP w mgnieniu oka.

Wiem, że PHP4 już nie ma, ale na części serwerów domyślnie jest ustawione. Tak jak pisałem Ajax odpada.

Planuję aby ten system był jak najprostszy w użyciu i osoba z minimalną ilością wiadomości na temat programowania/informatyki poradziła sobie z jego obsługą i instalacją.
gox
Skoro tak wyjscie jest tylko jedno, zrobic sprawdzanie aktualizacji na ajaxie smile.gif
mike
Cytat(gox @ 26.10.2008, 14:37:22 ) *
Skoro tak wyjscie jest tylko jedno, zrobic sprawdzanie aktualizacji na ajaxie smile.gif
Odpytania AJAXowe można robić tylko na adresach w domenie w której działa pytający skrypt JavaScript.
Nie możesz postawić sobie aplikacji w domenie domena.com i walić obiektem XMLHttpRequest w adres innadomena.com
Można to obejść na przykład tak: Ajax i wiele domen ale bez obejść nie działa. I to właśnie miał na myśli ~Maxik w swoim poprzednim poście.
Cysiaczek
@gox - chodzi o łączenie w ramach jednej domeny.

@Maxik - co najwyżej na darmowych tak może być. Twój argument jest nieaktualny. Naprawdę.
gox
Czyli sie da smile.gif

Skoro nie ajax to frame.
Maxik
W temaciechodziło o to czy ta metoda w ogóle zadziała, jeśli tak to w porządku, a jak to bedzie obsłużone od strony panelu admina, to już osobna sprawa. Dzięki za pomoc.
gox
Zadziala, ale 85% osob ktore zdecyduja sie uzyc Twojego cmsa nie beda w stanie zobaczyc czy jest nowa wersja, poniewarz korzystaja z darmowych hostingow...

jesli zrobisz iframe, to 100% uzytkownikow zobaczy czy jest nowa wersja, nawet przy wylaczonym javasccripcie tongue.gif
marcio
Sorki ale fopen() tez moze nie zadzialac jesli allow_url bedzie wylaczone czy sie myle??

Ja myslalem to zrobic za pomoca curl lub na socketach biggrin.gif pobrac zawartosc strony i poszukac tekst ktory jest w zrodle tylko gdy jest nowa wersja
gox
fopen nie dzialala jesli allow_open_url bedzie na off, masz slusznosc.

Curl ma okrutnego mula, nie powinno sie go uzywac nigdy.

framka wygrywa ;p
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.