Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: php online

Sivun loppuun

pr0 [15.03.2005 15:51:55]

#

Miten saisi (vai saisiko) php:lla tehtyä skriptin, joka näyttää kuinka paljon käyttäjiä on katsomassa sivua ilman tietokantaa? Löysin muutaman skriptin, joka tallentaa tämä tiedostoon, mutta mielestäni, jos samaan tiedostoon ruvetaan kirjoittamaan samanaikaisesti, niin se vaurioittuu.

rndprogy [15.03.2005 16:00:44]

#

Mitä tarkoitat että tiedosto vaurioituu o_O Eihän sinne voi edes kirjoittaa yhtä aikaan kun skriptihän tulkataan lause kerrallaan.

adu-san [15.03.2005 17:09:50]

#

https://www.ohjelmointiputka.net/koodit_nayta.php?tunnus=1130

Tossa ei ilmeisesti pysty kirjottamaan tiedostoon samaan aikaan.

rndprogy kirjoitti:

skriptihän tulkataan lause kerrallaan.

Jos kaksi käyttäjää samaan aikaan sivulla.

pr0 [15.03.2005 17:32:57]

#

Jo, tarkoitan sitä, että jos tulee samanaikaisesti 2 eri käyttäjää sivulle, niin se tiedosto vaurioittuu.

ajv [15.03.2005 17:38:20]

#

Jos tiedostossa on vain sivuja selaavien käyttäjien ip:t ja kellonajat, niin herää kysymys, onko se niin vaarallista, jos se tiedosto hajoaa? Varsinkin, jos ja kun se itsestään korjaantuu seuraavalla sivunlatauksella. Pienemmillä käyttäjämäärillä tuo on kuitenkin todella epätodennäköistä.

Edit:

pr0 kirjoitti:

Jo, tarkoitan sitä, että jos tulee samanaikaisesti 2 eri käyttäjää sivulle, niin se tiedosto vaurioittuu.

Ei tiedosto hajoa, jos sivuilla on kaksi käyttäjää samaan aikaan. Tiedosto voi hajota, kun kaksi käyttäjää lataa sivun täsmälleen samaan aikaan, jolloin tavallaan kaksi php-skriptiä avaa tiedoston samalla hetkellä. Tähänkin auttaa hyvin pitkälti flock(), vaikka kuulemma sekään ei mitään takaa.

pr0 [15.03.2005 17:49:45]

#

ajv kirjoitti:

Jos tiedostossa on vain sivuja selaavien käyttäjien ip:t ja kellonajat, niin herää kysymys, onko se niin vaarallista, jos se tiedosto hajoaa? Varsinkin, jos ja kun se itsestään korjaantuu seuraavalla sivunlatauksella. Pienemmillä käyttäjämäärillä tuo on kuitenkin todella epätodennäköistä.

Edit:

pr0 kirjoitti:

Jo, tarkoitan sitä, että jos tulee samanaikaisesti 2 eri käyttäjää sivulle, niin se tiedosto vaurioittuu.

Ei tiedosto hajoa, jos sivuilla on kaksi käyttäjää samaan aikaan. Tiedosto voi hajota, kun kaksi käyttäjää lataa sivun täsmälleen samaan aikaan, jolloin tavallaan kaksi php-skriptiä avaa tiedoston samalla hetkellä. Tähänkin auttaa hyvin pitkälti flock(), vaikka kuulemma sekään ei mitään takaa.

siis tarkoitan juuri sitä että hajoaa, jos tulee 2 käyttäjää samanaikaisesti. Toi flock kai toimii niin, että jos tulee 2
käyttäjää samanaikaisesti, niin vain yksi rekisteröidään.

ajv [15.03.2005 17:53:38]

#

Jos haluaa 99% varman systeemin, on tehtävä jokaiselle ip-osoitteelle oma tiedosto. Silti on mahdollista, että esim. minä ja työkaverini töissä ladataan samaan aikaan saman proxyn takaa samalla ip-osoitteella sivujasi ja tiedosto poksahtaa.

pr0 [15.03.2005 18:15:43]

#

Löysin nyt alla olevan, mutta
saan virheilmoituksen: Parse error: parse error, unexpected T_ELSE in /home/echomcf/public_html/test.php
Osaako joku sanoa missä on vika?

<?php
session_save_path("/path/");
/* Start the session */
session_start();

/* Define how long the maximum amount of time the session can be inactive. */
define("MAX_IDLE_TIME", 3);

function getOnlineUsers(){

if ( $directory_handle = opendir( session_save_path() ) ) {
$count = 0;
while ( false !== ( $file = readdir( $directory_handle ) ) ) {
if($file != '.' && $file != '..'){
// Comment the 'if(...){' and '}' lines if you get a significant amount of traffic
if(time()- fileatime(session_save_path() . '\\' . $file) < MAX_IDLE_TIME * 60) {
$count++;
}
}
closedir($directory_handle);

return $count;

} else {
return false;
}

}

echo 'Number of online users: ' . getOnlineUsers() . '<br />';
?>

tsuriga [15.03.2005 18:32:57]

#

Debuggailitko ite tota kuinka pitkään? Käy joku kunnon editori millä näät luo {}-lohkot, kthx.

Ps. Tuota on iha hirveä lukea kun sulkujen välissä on aina väli.

EDIT: Nonih tulipa se oikeaki vastaus sieltä, ite katoin väärin (kun ne sisennykset on _taas_ päin mäntyjä) ;V

Juice [15.03.2005 18:46:07]

#

Ei pitäisi olla niin huolimaton poista viesti-napin kanssa... No, tässä uudestaan:

<?php
session_save_path("/path/");
/* Start the session */
session_start();

/* Define how long the maximum amount of time the session can be inactive. */
define("MAX_IDLE_TIME", 3);

function getOnlineUsers(){

    if ( $directory_handle = opendir( session_save_path() ) ) {
        $count = 0;
        while ( false !== ( $file = readdir( $directory_handle ) ) ) {
            if($file != '.' && $file != '..'){
                    // Comment the 'if(...){' and '}' lines if you get a significant amount of traffic
                   if(time()- fileatime(session_save_path() . '\\' . $file) < MAX_IDLE_TIME * 60) {
                    	$count++;
               	   }
            }
            closedir($directory_handle);
            return $count;
        }
    } else {
        return false;
    }
}
echo 'Number of online users: ' . getOnlineUsers() . '<br />';
?>

pr0 [15.03.2005 18:50:37]

#

Nyt "toimii", mutta näyttää, että on 0 käyttäjää online:)

ajv [15.03.2005 19:39:35]

#

Aika jännä toteutus, kieltämättä. Itse sain toimimaan seuraavan:

<?php
session_save_path("path");
session_start();
$_SESSION['foo'] = rand();
function getOnlineUsers($idle_minutes = 3){
   $count=0;
   foreach(glob(session_save_path()."/*") as $file){
      if(time()- fileatime($file) < $idle_minutes * 60)
         $count++;
   }
   return $count;
}
echo '<br />Number of online users: ' . getOnlineUsers() . '<br />';
?>

Raakaversio ilman mitään ylimääräisiä tarkistuksia. Vika näytti itellä ainakin olevan siinä, että sessioon ei tehty muutoksia, jolloin session muokkausaika ei muuttunut. $_SESSION['foo'] = rand(); korjasi sen asian.

pr0 [16.03.2005 12:29:51]

#

Nyt tulee seuraava varoitus:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home/echomcf/public_html/test.php:6)
Tämä varmaan johtuu sitä, että php.inissa on määritelty, että sessio alkaa automaattisesti ilman session_startia.
Jos reloadaan, niin onlineusereiden määrä kasvaa aina yhdellä (nollautuu kyllä 3 min. välein).
Kun poistan session_startin(), niin varoitusta ei tule, mutta onlineusereiden määrä on puhdas 0.Mistä tämä voi johtua?

Olga [16.03.2005 13:50:24]

#

http://pp.kpnet.fi/blaze/codefaq/#headerssent

pr0 [16.03.2005 15:56:37]

#

Nonnniiin, nyt kai sain toimimaan kunnolla, mutta kiinnostaa sellainen, että jos on esimerkiksi ollut samalla sivulla 10 min. ja on lukenut siellä jotain ja idle_minutes=3 min., niin onko se niin että 3 min. jälkeen laskuri näyttää uusille käyttäjille, että käyttäjä ei enää ole sivulla? Jos tekee sellaisen online-laskurin, että se tallentaa tulevat käyttäjät MySql-tietokantaan, niin osaako MySql käsitellä samanaikaisen tietueiden lisäyksen?


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta