Jabol
4.04.2003, 19:23:32
Mam takie pytanie: Czy jest możliwość, aby w jakiś sposób móc wywołać kawałek kodu przy zamykanie przeglądarki przez użytkownika. Np. ja se coś i przeglądam, i wychodze ze strony i bez mojej wiedzy na serwerze wtedy wykonuje się jakiś kod. Oczywiście chodzi mi o rozwiązanie uniwersalne działające również np. na Lynx'a. Dokładniej chce aby po wyjściu użytkownika ze strony usuwały mi się pewne pliki.
itsme
5.04.2003, 09:47:45
widzialem skrypt w Javie przy zamknieciu przegladarki pojawial sie komunikat ze byles u nas .... minut proponuje poszukac i zobaczyc czy da sie wywolac odpowiedni adres
a swoja droga mozna rozwiazac to sesjami i podczas wywolania strony sprawdzac mozna jak dlugo user pracuje na stronie i jezeli minie 5 minut od ostatniego klikniecia na jakis link to usunac odpowiednie pliki
Zdaje sie że w js akcja onUnload. A wtedy otwierasz małe okienko, gdzie wykonujesz określone akcje, a następnie je zamykasz
Jabol
5.04.2003, 10:53:16
ta propozycja z sesjami jest niezła, a to z onUnload to nie przejdzie, bo można np. zablokować js, a w Lynxie to JS wogóle nie działa
dziama
25.04.2003, 14:39:10
no własnie jak dokładniej powinno wyglądać taki skrypt to sprawdzania aktywnosci i ewentualnego usuwania pliku sesji??
Jabol
25.04.2003, 15:46:19
możesz to zrobić tak:
-zapisujesz datę wejścia na strone (najlepiej w jakieś szybkiej db), może to być normalna godzina, może być również np przeliczona na sekundy.
-robisz[php:1:dbbb9d2fac]<?php
$now=time();
$time_to_die=300;//60*5
$result=mysql_query("SELECT 'user' FROM 'tabela' WHERE 'logged'=1 AND 'last_login'<".$now-$time_to_die);//masz już nazwy userów, którym trzeba coś zrobić "na dowidzenia"
/*np. mysql*/mysql_query("UPDATE 'tabela' SET 'logged'=0 WHERE 'last_login'<".$now-$time_to_die);
?>[/php:1:dbbb9d2fac]
-gotowe
members_of_mayday
13.07.2003, 19:08:24
Tak też jest poprawnie :
[php:1:b3aa3d9593]
<?
$db = mysql_connect("localhost", "root", "bytom") ;
mysql_select_db("edu", $db);
$res = mysql_query ("SELECT * FROM user ");
while($row = mysql_fetch_array($res))
{
$akt=$row["akt"];
$username= $row["username"];
$time = time();
$auttime = 300;
$lasttime = $akt + $auttime;
if ($time>$lasttime)
{
echo "";
}else{
echo "<font color=a72763> $username</fomt> :";
}
}
?>[/php:1:b3aa3d9593]
kwiateek
14.07.2003, 09:32:36
Cytat
Tak też jest poprawnie
Popoprawnie to owszem może jest, ale w jakim celu odciążać bazę danych od tego typu czynności skoro jest taka możliwość? W przypadku dwóch poprawnych możliwości powinno postawić się w drugiej mierze (albo w kolejnej w zależnosci od ustalonych przez siebie priorytetów) na szybkość funkcjonowania skryptów.
members_of_mayday
14.07.2003, 09:41:08
sugerujesz , że mój skrypt jest wolniejszy niż od Jabol'a.
Cel hmm może dlatego żeby ta baza szybciej pracowała szczerzę mówiąc niezastanawiałęm się . ale masz przykłąd zastosowania np zliczania osób zalogowanych na stronie,śledzenia uzytkowników itp. za pomocą If i wyciągania z bazy pewnych danych wydaje mi się ze to łatwiejsz i b korzystne dla osób które chcą coś takiego umieści na stronach swojich serwisów
P.s szybkość u mnie j znakomita biorąc pod uwagę że w bazie np z userami było by ok. 20000 rekordów . ile sek trwało by wykonanie skryptu a ile przez IF
bo ja nie wiem moim zdaniem If był by szybszy
ciekawe czy ma sens to co napisałęm ?
Seth
14.07.2003, 09:48:00
Aby dokladnie wiedziec kiedy user opuscil strone mozemy zastosowac
Streaming HTML.
Po stworzeniu calej strony - wyslaniu jej do klienta, na koncu dajemy [manual:6a9a5ff973]flush[/manual:6a9a5ff973]. Ustawiamy [manual:6a9a5ff973]ignore-user-abort[/manual:6a9a5ff973] na true oraz [manual:6a9a5ff973]Set_Time_Limit[/manual:6a9a5ff973] na 0. Odpalamy "nie konczaca sie petle", ktora utrzymuje caly czas polaczenie z klientem. W petli umieszczamy warunek na [manual:6a9a5ff973]connection-aborted[/manual:6a9a5ff973] == true, przed nim musimy umiescic jeszcze flush. Jezeli bedzie prawda uruchamiamy kod, ktory ma byc uruchominny po zamknieciu strony.
Gotowiec

:
[php:1:6a9a5ff973]//...
flush();
ignore_user_abort(true);
set_time_limit(0);
while ()
{
flush();
if ( connection_aborted == true )
{
// jakis skrypt, po zamknieciu polaczenia
brake;
}
}[/php:1:6a9a5ff973]
members_of_mayday
14.07.2003, 09:55:19
sposobów jest sporo
i Twój działa
dtektor
15.07.2003, 16:26:10
Witaj
Pisales 10:48 14-07-2003 to co zamiescilem ponizej, ten kod ktory podales nie dziala, po paru kombinacjach-wychodzi cos takiego ze jak puszczam poprawna petle while-to przegladarka mi sie zawiesza (w neverendingloopie)- 8O , a jak zamykam to zadna z akcji ustawionych nie dziala, probowalem rowniez z register_shutdown_function() i takze to nie pomaga.
Jesli wiesz jak wykonac jakis skrypt po zamknieciu przegladarku (tudziez resecie kompa) to napisz.
z gory dziekuje
Dtektor
Cytat
Aby dokladnie wiedziec kiedy user opuscil strone mozemy zastosowac
Streaming HTML.
Po stworzeniu calej strony - wyslaniu jej do klienta, na koncu dajemy [manual:654a0f5c68]flush[/manual:654a0f5c68]. Ustawiamy [manual:654a0f5c68]ignore-user-abort[/manual:654a0f5c68] na true oraz [manual:654a0f5c68]Set_Time_Limit[/manual:654a0f5c68] na 0. Odpalamy "nie konczaca sie petle", ktora utrzymuje caly czas polaczenie z klientem. W petli umieszczamy warunek na [manual:654a0f5c68]connection-aborted[/manual:654a0f5c68] == true, przed nim musimy umiescic jeszcze flush. Jezeli bedzie prawda uruchamiamy kod, ktory ma byc uruchominny po zamknieciu strony.
Gotowiec

:
[php:1:654a0f5c68]//...
flush();
ignore_user_abort(true);
set_time_limit(0);
while ()
{
flush();
if ( connection_aborted == true )
{
// jakis skrypt, po zamknieciu polaczenia
brake;
}
}[/php:1:654a0f5c68]
e-Gandalf
15.07.2003, 16:37:04
Nie specjalnie podoba mi sie ta metoda, szczerze mowiac. Przede wszystkim niesamowicie obciaza serwer, lacze... wszystko. Jesli juz brudzic sie i bawic w takie cos, to lepiej wyglada malutki iframe odswierzany co np. sekunde.
Seth
16.07.2003, 07:59:20
Sprawdze kod w domu i zobacze co jest nie tak.
scanner
16.07.2003, 08:36:56
dtektor: Sugerowałbym, abyś nauczył sie poprawnie cytować:
- cytuje się tylko te fragmenty, do których chcemy się ustosunkowac
- wycinamy elementy niepotrzebne
- odpowiadamy POD cytowanym fragmentem.
Seth
14.08.2003, 23:48:05
Jako, ze po odpoczynku naszla mnie wena tworcza

tutaj jest poprawnie dzialajacy kod wykorzystujacy streaming html do utrzymywania polaczenia z klientem oraz sprawdzania kiedy zerwal polaczenie z nasza strona:
<?php
//...
// by Seth
{
}
// kod na dowidzenia
?>
goped
20.01.2004, 22:33:21
a dlaczego nie mozna uzyc samego if(conection_abordet())?
goped
20.01.2004, 22:47:11
a i tak w ogole nie moge dojsc ciagledo tego co to jest flush i Streaming HTML
Seth
20.01.2004, 23:23:51
Cytat
a i tak w ogole nie moge dojsc ciagledo tego co to jest flush
"Wypluwanie" danych do klienta. Wiecej [manual:0b56cd140f]flush[/manual:0b56cd140f]
Cytat
... i Streaming HTML
Streaming HTML to cos podobnego do tego co nazywamy media strumieniowe. Tzn polaczenie z klientem jest przez caly czas utrzymywane. W przypadku zwyklych stron po wyslaniu danych do klienta/przegladarki polaczenie jest zamykane.
Co to nam daje ?
To, ze mozemy wysylac caly czas nowe dane wykorzstujac to, ze jestesmy z uzytkownikiem polaczeni, a wiec zmienne i operacje juz przetworzone mamy w pamieci - czyli nie musimy uzywac np sesji.
Edit: cos takiego uzywa sie np do tworzenia chatow w php gdzie caly skrypt wykorzystujacy Streming HTML caly czas wypluwa (flush) tekst teg co pisza inni.
P.S. Nastepnym razem napiz na PW, a nie tworz nowego tematu !
goped
20.01.2004, 23:28:42
szybko piszesz :],
a da sie wtedy przy pomocy tego bo spanlezo mowil ze php jest wykonywane i znika jakies tam side server czy jakos tak a czy przy pomocy tego mozna np. funkcje zostawic tak jak zostaja w js? i nie rozumiem, wyplowanie do klienta danych czyli co nam to da?
wiesz wkoncu jestem poczatkujacy
goped
20.01.2004, 23:35:07
wielkie ci dzieki chyba wlasnie zaczolem rozumiec, wiesz przewaznie jak do kogos napisalem pisal od tego jest forum ale nie ma sprawy nie bede tworzyl nowego temtu dzieki ci zaraz sprobjem zrobic chata za pomoca tej komendy
Seth
21.01.2004, 01:09:34
Cytat
a da sie wtedy przy pomocy tego bo spanlezo mowil ze php jest wykonywane i znika jakies tam side server czy jakos tak a czy przy pomocy tego mozna np. funkcje zostawic tak jak zostaja w js?
? Nie rozumiem.
Cytat
i nie rozumiem, wyplowanie do klienta danych czyli co nam to da?
Sproboj zrobic tak, ze tworzysz sobie petle i dawaj wewnatrz print $i."rn"; gdzie $i to kolejne wartosci w petli for. Jak pewnie zauwazysz wartosci te pojawia Ci sie dopiero wtedy kiedy petla sie zakonczy. I tutaj wlasnie pomaga nam flush... jezli dasz go po print odrazu przegladarka Ci go wyswietli.
goped
21.01.2004, 01:39:53
dzieki tobie i bambosowi zrozumialem to wkoncu wielkie dzieki :]
Nitryt14
5.03.2004, 16:56:38
A jak nalezalo by przerobić ten skrypt tak zeby jak użytkownik się loguje w tabeli np. uzyt_online się zapisywało ze ten uzytkownik jest teraz on-line a jak się rozłaczy zeby stamtąd usuwalo ten wpis?
Z góry dziekuje i pozdrawiam
falkor
14.05.2005, 00:51:37
Dla wszystkich chcacych bawic sie z metoda flush() cytuje kawalek php.ini z wersji 5:
Cytat
Implicit flush tells php to tell the output layer to flush itself
; automatically after every output block. This is equivalent to calling the
; php function flush() after each and every call to print() or echo() and each
; and every HTML block. Turning this option on has serious performance
; implications and is generally recommended for debugging purposes only
i odradzam ze wzgledu na wydajnosc.
Czy ma ktos pomysl jak osiagnac dokladny czas ZAMKNIECIA PRZEGLADARKI inna metoda?
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.