Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pobieranie wyniku skryptu
Forum PHP.pl > Forum > Przedszkole
axwell
Korzystam z darmowego licznika ze strony www.fuu.pl
taki oto adres url służy do wyswietlania liczby osób aktualnie przebywajacych na stronie:

http://www.fuu.pl/licznik/online.php?id=mojlicznik

Moje pytanie: czy istnieje jakaś funckja, która pobiera wartośc tego skryptu i wstawia ją do zmiennej? Coś w stylu

  1. <?php
  2. $online = http// www.fuu.pl/licznik/online.php?id=mojlicznik</a>
  3. ?>
Spirit86
Możesz pobrać wartość za pomocą wyrażenia regularnego np.:

  1. <?php
  2. $handle = join(file('ht://www.fuu.pl/licznik/online.php?id=mojlicznik'));
  3.  
  4. preg_match_all('#<b>(.*?)</a>#is', $ilosc,$handle);
  5.  
  6. $ilosc = $ilosc[1];
  7. ?>


ale...

1) musisz mieć włącząną na serwerze obsługę file zdalnego (pobieranie pliku z innego serwera)
2) ten skrypt nie będzie działał, jak nie będzie wyświetlany w owej postaci na Twojej stronie, chyba, że sprawdzisz czy można zastosować myk - wstawisz na stronie:
  1. <img src="http://www.fuu.pl/licznik/online.php?id=mojlicznik" style="height:0;width:0;" />
axwell
niestety skrypt, który mi podałeś nie działa :/

Cytat
Warning: join() [function.join]: Argument to implode must be an array.


jeśli chodzi o drugie rowiązanie, to niestety sam obrazek mi nic nie da... potrzebuję wartości, bo chcę nią póżniej operować
Spirit86
drugi obrazek jest połączony w pierwszym algorytmem. Możesz zrobić jeszcze tak:


  1. <?php
  2.  
  3. $ch = curl_init://www.fuu.pl/licznik/online.php?id=mojlicznik');
  4.           curl_setopt($ch,    CURLOPT_RETURNTRANSFER, 1);
  5.           curl_setopt($ch,    CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");          
  6.           curl_setopt($ch,    CURLOPT_FOLLOWLOCATION, 1);
  7.           curl_setopt($ch,    CURLOPT_TIMEOUT, 20);
  8.           curl_setopt($ch,    CURLOPT_CONNECTTIMEOUT, 20);
  9.           $handle  = curl_exec ($ch);
  10.           curl_close ($ch);
  11.  
  12.  
  13. preg_match_all('#<b>(.*?)</a>#is', $ilosc,$handle);
  14.  
  15. $ilosc = $ilosc[1];
  16.  
  17.  
  18. ?>


Jeżeli to nie działa, to nie pobierzesz tego za pomocą php. Możesz zrobić ew. tak: Ajaxem pobierasz stronę ze serwera fuu.pl, wysyłasz zmienną do pliku php na serwerze (np. powyższego), dopisujesz linijkę, aby zapisał wartość aktualnych osób w pliku lub w bazie danych.

Znacznie prościej jest napisać samemu taką funkcję sprawdzającą ile osób jest online aktualnie... a żeby było śmieszniejsze taki skrypcik już Bastion za Ciebie napisał:
Bastion
  1. <?php
  2. function online_meter($uid, $livetime = 300)
  3.    {
  4.        $filename = 'online_meter/log.txt';
  5.  
  6.        $keep = array();
  7.        $now = time();
  8.        $max_live  = $now - $livetime;
  9.        $add_guest = true;
  10.  
  11.        if ($table = @file($filename))
  12.        {
  13.            for ($i = 0, $j = count($table); $i < $j; $i++)
  14.            {
  15.                list($user_id, $user_time) = explode(';', $table[$i]);
  16.                if ($user_time > $max_live)
  17.                {
  18.                    $keep[] = $table[$i];
  19.                    if ($uid == $user_id)
  20.                    {
  21.                        $add_guest = false;
  22.                    }
  23.                }
  24.            }
  25.            if (count($keep) != count($table))
  26.            {
  27.                for ($i = 0, $j = count($keep); $i < $j; $i++)
  28.                {
  29.                    $buff .= $keep[$i];
  30.                }
  31.                $om = fopen($filename, 'w');
  32.                fputs($om, $buff);
  33.                fclose($om);
  34.            }
  35.        }
  36.  
  37.        if ($add_guest)
  38.        {
  39.            $om = fopen($filename, 'a+');
  40.            fputs($om, $uid.';'.$now."n");
  41.            fclose($om);
  42.            return count($keep)+1;
  43.        }
  44.  
  45.        return count($keep);
  46.    }
  47.  
  48.    $users_online = online_meter($_SERVER['REMOTE_ADDR']);
  49.  
  50. ?>

Musisz stworzyć tylko katalog online_meter, a w nim plik log.txt i nadać mu uprawnienia np. 777
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.