Ik kan het niet zo gauw vinden maar is het mogelijk om een bezoekers online script te maken zonder database? En als dat kan kan iemand dat dan voor mij maken? Ik heb het dus over een "Hoeveel bezoekers zijn er op deze pagina" script.
Bedankt alvast.
Ik verveel me. Dus ik ga is kijken of ik wat kan bakken voor je.
EDIT: ik heb er een class van gemaakt. Vond ik mooier en makkenlijker.
<?php
/**
* OnlineScript
*
* PHP versie 5.2 getest moet volgensmij op PHP versie 5 ook werken
*
* Gebruik is alsvolgd gewoon aan het begin van de pagina de class aanroepen.
* bijv: (hier ga ik vanuit dat je dit bestand hebt opgeslagen in
* onlinescript.class.php)
* <?php
* include 'onlinescript.class.php';
* $OnlineList = new OnlineScript();
* ?>
* Hiermee word automatisch het gebruiker ip geupdate.
*
* Als je de lijst wilt uitlezen gebruik je de functie getLastOnlineList($tijd)
* hier is $tijd het aantal minuten geleden dat een gebruiker nog 'actief' word
* beschouwd. weer een voorbeeldje om het uit te lezen:
* <?php
* foreach ($OnlineList->getLastOnlineList(5) as $value) {
* echo $value.'<br />';
* }
* ?>
* Dit geeft een lijst van gebruikers die actief waren de laatste 5 minuten.
*
* @version 1.0
* @author Martijn van Wensveen
*/
class OnlineScript
{
protected $bestand;
/**
* Word automatisch aangeroepen wanneer class word aangeroepen. En zorgt
* ervoor dat de gebruiker gelijk gewijzigd word op de actief lijst. Je kan
* ook nog kiezen voor een ander bestand, en of de filecheck uitgevoerd
* moet worden.
*
* @param String $bestand De bestand naam, standaart online.txt
* @param Boolean $fileCheck Of de filecheck uitgevoerd moet worden
* standaart True.
*/
public function __construct($bestand = 'online.txt', $fileCheck = TRUE) {
$this->bestand = $bestand;
if ($filecheck == TRUE) {
OnlineScript::checkFile();
}
// Kijken of ip adres al een keer voorkomt
if (!OnlineScript::checkUser()) {
// Niet dus, dus nu gaan we gebruiker toevoegen.
$newValue = $_SERVER['REMOTE_ADDR']."..".time()."\n";
$oldValue = file_get_contents($this->bestand);
if (!file_put_contents($this->bestand, $oldValue.$newValue)) {
echo 'Er is iets mis gegaan met updaten van online bestand.';
}
}
else {
// Wel nu word alleen die regel aangepast en komen er dus geen
// onnodige regels erbij.
$string = '';
foreach ($file as $value) {
$string .= $value;
}
if (!file_put_contents($this->bestand, $string)) {
echo 'Er is iets mis gegaan met updaten van online bestand.';
}
}
}
/**
* Lijst ophalen met laatst actieve ip adressen
*
* @param Integer $time Hoeveel minuten geleden een gebruiker nog beschouwd
* word als 'actief'
* @return Array lijst met actieve gebruikers.
*/
public function getLastOnlineList($time) {
// Hoelang geleden een gebruiker nog 'actief' is
$time = time() - ($time * 60);
// Bestand openen in een array
$file = file($this->bestand);
$userarray = array();
foreach ($file as $value) {
$userdata = explode('..', $value);
if ($userdata[1] > $time) {
// Gebruiker actief dus op de lijst zetten.
array_push($userarray, $userdata[0]);
}
}
return $userarray;
}
/**
* Kijkt of user in het bestand staat.
*
* @return Boolean True als user is gevonden.
*/
private function checkUser() {
// Uitlezen van bestand.
$file = file($this->bestand);
foreach ($file as $key => $value) {
// Splitten van ip en tijd
$value = explode('..', $value);
if ($value[0] == $_SERVER['REMOTE_ADDR']) {
$file[$key] = $value[0]."..".time()."\n";
// user is gevonden.
return TRUE;
}
}
// user is niet gevonden
return FALSE;
}
/**
* Kijkt of bestand al bestaat. Zoniet maakt hij hem aan.
*
*/
private function checkFile() {
if (!file_exists($this->bestand)) {
$lol = fopen($this->bestand, 'w+');
fclose($lol);
}
}
/**
* Leegt de lijst. De opgegeven time variablen is voor de tijd waarvoor
* alles word weg gehaald.
*
* @param Integer $time In uren.
*/
public function clearList($time) {
// Tijd in uren, voor dit tijdstip word alles weg gehaald.
$time = time() - ($time * 3600);
// Uitlezen van bestand
$file = file($this->bestand);
foreach ($file as $value) {
$value = explode('..', $this->bestand);
if ($value[1] > $time) {
// Is nog binnen de tijd dus word toegevoegd aan nieuw bestand
$newFile = $value[0].'..'.$value[1];
}
}
// Oude records nu weghalen door alles te overschrijven.
if (file_put_contents($this->bestand, $newFile)) {
echo 'Online bestand is succesvol geleegd.';
}
else {
echo 'Er is iets mis gegaan bij het legen van het online bestand';
}
}
}
?>
Ben benieuwd wat jullie er van vinden. Kritiek kan ik hebben :) En misschien werkt hij niet helemaal goed want ik heb hem ook niet goed getest.
<?php
/**
* OnlineScript
*
* PHP versie 5.2 getest moet volgensmij op PHP versie 5 ook werken
*
* Gebruik is alsvolgd gewoon aan het begin van de pagina de class aanroepen.
* bijv: (hier ga ik vanuit dat je dit bestand hebt opgeslagen in
* onlinescript.class.php)
* <?php
* include 'onlinescript.class.php';
* $OnlineList = new OnlineScript();
* ?>
* Hiermee word automatisch het gebruiker ip geupdate.
*
* Als je de lijst wilt uitlezen gebruik je de functie getLastOnlineList($tijd)
* hier is $tijd het aantal minuten geleden dat een gebruiker nog 'actief' word
* beschouwd. weer een voorbeeldje om het uit te lezen:
* <?php
* foreach ($OnlineList->getLastOnlineList(5) as $value) {
* echo $value.'<br />';
* }
* ?>
* Dit geeft een lijst van gebruikers die actief waren de laatste 5 minuten.
*
* @version 1.0
* @author Martijn van Wensveen
*/
class OnlineScript
{
protected $bestand;
/**
* Word automatisch aangeroepen wanneer class word aangeroepen. En zorgt
* ervoor dat de gebruiker gelijk gewijzigd word op de actief lijst. Je kan
* ook nog kiezen voor een ander bestand, en of de filecheck uitgevoerd
* moet worden.
*
* @param String $bestand De bestand naam, standaart online.txt
* @param Boolean $fileCheck Of de filecheck uitgevoerd moet worden
* standaart True.
*/
public function __construct($bestand = 'online.txt', $fileCheck = TRUE) {
$this->bestand = $bestand;
if ($fileCheck == TRUE) {
OnlineScript::checkFile();
}
// Kijken of ip adres al een keer voorkomt
if (!OnlineScript::checkUser()) {
// Niet dus, dus nu gaan we gebruiker toevoegen.
$newValue = $_SERVER['REMOTE_ADDR']."..".time()."\n";
$oldValue = file_get_contents($this->bestand);
if (!file_put_contents($this->bestand, $oldValue.$newValue)) {
echo 'Er is iets mis gegaan met updaten van online bestand.';
}
}
else {
// Wel nu word alleen die regel aangepast en komen er dus geen
// onnodige regels erbij.
$string = '';
$file = file($this->bestand);
foreach ($file as $value) {
// Kijken of hij bij de user is die geupdate moet worden.
$value = explode('..', $value);
if ($value[0] == $_SERVER['REMOTE_ADDR']) {
// User gevonden, tijd updaten
$string .= $value[0]."..".time()."\n";
}
else {
// Geen user dus gewoon verder gaan..
$string .= $value[0]."..".$value[1];
}
}
// Alles uitschrijven
if (!file_put_contents($this->bestand, $string)) {
echo 'Er is iets mis gegaan met updaten van online bestand.';
}
}
}
/**
* Lijst ophalen met laatst actieve ip adressen
*
* @param Integer $time Hoeveel minuten geleden een gebruiker nog beschouwd
* word als 'actief'
* @return Array lijst met actieve gebruikers.
*/
public function getLastOnlineList($time) {
// Hoelang geleden een gebruiker nog 'actief' is.
// Dit is in minuten
$time = time() - ($time * 60);
// Bestand openen in een array
$file = file($this->bestand);
$userarray = array();
foreach ($file as $value) {
$userdata = explode('..', $value);
if ($userdata[1] > $time) {
// Gebruiker actief dus op de lijst zetten.
array_push($userarray, $userdata[0]);
}
}
return $userarray;
}
/**
* Kijkt of user in het bestand staat.
*
* @return Boolean True als user is gevonden.
*/
private function checkUser() {
// Uitlezen van bestand.
$file = file($this->bestand);
foreach ($file as $key => $value) {
// Splitten van ip en tijd
$value = explode('..', $value);
if ($value[0] == $_SERVER['REMOTE_ADDR']) {
$file[$key] = $value[0]."..".time()."\n";
// user is gevonden.
return TRUE;
}
}
// user is niet gevonden
return FALSE;
}
/**
* Kijkt of bestand al bestaat. Zoniet maakt hij hem aan.
*
*/
private function checkFile() {
if (!file_exists($this->bestand)) {
$lol = fopen($this->bestand, 'w+');
fclose($lol);
}
}
/**
* Leegt de lijst. De opgegeven time variablen is voor de tijd waarvoor
* alles word weg gehaald.
*
* @param Integer $time In uren.
*/
public function clearList($time) {
// Tijd in uren, voor dit tijdstip word alles weg gehaald.
$time = time() - ($time * 3600);
// Uitlezen van bestand
$file = file($this->bestand);
foreach ($file as $value) {
$value = explode('..', $this->bestand);
if ($value[1] > $time) {
// Is nog binnen de tijd dus word toegevoegd aan nieuw bestand
$newFile = $value[0].'..'.$value[1];
}
}
// Oude records nu weghalen door alles te overschrijven.
if (file_put_contents($this->bestand, $newFile)) {
echo 'Online bestand is succesvol geleegd.';
}
else {
echo 'Er is iets mis gegaan bij het legen van het online bestand';
}
}
}
?>
Error gefixed. Was nog wat vergeten met het ombouwen ;)