host in array speichern !

ThePosterity

Aktives Mitglied
<?php
session_start(); /* session starten(sid erzeugen) !!! */

$sid=session_id(); /* Session id */
$REMOTE_ADDR = getenv("REMOTE_ADDR"); /* IP */
$host = gethostbyaddr($_SERVER['REMOTE_ADDR']); /* Host */

$liste = array (); /* liste der hostadressen !!! */

if (in_array($host,$liste)) {
echo $host."->Host ist schon vorhanden !!!";
} else {
echo $host."->Wird hinzugefügt !!!";
array_push($liste,$host);
}
?>
das funktioniert eigentlich ganz so wie ich es möchte nur wird jedes mal
angezeigt das der host wieder hinzugefügt wurde.
aber warum,das sollte doch schon in $liste vorhanden sein beim nächsten aufruf oder ?

 
Mit

CODE $liste = array ();


erzeugst du das Array $liste neu. Oder anders gesagt, du überschreibst das allenfalls bereits vorhandene Array mit einem leeren.
 
Du musst das Array von der einen Site zur anderen übergeben. Am einfachsten packst du es in eine Sessionvariable rein und prüfst diese dann.
 
Grundsätzlich sind beim Start einer PHP-Applikation *alle eigenen Variablen leer!*.

Wenn man die Werte beim nächsten Aufruf noch will, speichert man es entweder in einer Datenbank oder in einer Datei und liest sie bei jedem Aufruf aus!
 
wollte das wenn möglich ohne session machen (habe ich vergessen herraus zu nehmen)
huh.gif

bin immernoch anfänger
wink.gif


äh arrays sind doch auch soetwas wie dateien (oder) nur das sie halt nicht auf
platte gespeichert sind !?
 
Ich glaube da verwechselst du etwas. Ueberflieg vielleicht folgendes kurz: Array


Aber du solltes dich vielleicht klarer ausdrücken, was du mit dem Code anstellen willst. Ich gehe davon aus, dass du den Host der User die auf deine Seite kommenspeicher willst. Aber dann musst du diese Liste wirklich irgendwie abspeichern, denn jedesmal wenn diese Seite erneut aufgerufen wird, wird der Code neu geparst, will heissen es wird wie eine neue Instanz des Programmes aufgerufen.

Der langen Rede kurzer Sinn du musst ungefähr folgendes machen:
CODE
<?php
/* Du musst Schreibrechte für diese Datei besitzen, in diese Datei wird deine Liste gespeichert */
$file = 'liste.txt';
$hostliste = file($file); // Lädt die Datei in Array

$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);

if (!in_array($host, $hostliste)) { //Wenn der Host nicht in der Liste auftaucht.
if (!$handle = fopen($filename, "a")) {
echo "Kann die Datei $file nicht öffnen";
exit;
}

if (!fwrite($handle, $host . "\n")) {
echo "Kann in die Datei $file nicht schreiben";
exit;
}

echo $host . "->Wird hinzugefügt !!!";

fclose($handle);

} else {
echo $host . "->Host ist schon vorhanden !!!";
}
?>

 
ich dachte es wäre schlauer erstmal das ganze mit einem array zu realisieren (wegen performance=weniger festplatten zugriffe) aber egal wenn es anders wohl nicht geht
sad.gif



 
Hallo

Ein Array (aber auch allgemein Variablen) steht immer nur zur Laufzeit des Script zur Verfügung, d.h. sobald die Daten zum Client geschickt werden, werden alle Arrays gelöscht bzw. verworfen.

Ich weiss zwar nicht genau was du vor hast, aber vorläufig würde ich mir noch keine Gedanken zur Performence machen.

Grüsse
Driver
 
soll ein counter werden ! (wievile auf der seite sind halt u.s.w.)
wie speichere ich den im host namen dann noch variablen z.b. zeit,ip oder so evtl name,passwort ?
für weitere tips bin ich dankbar .
danke für alles
ThePosterity
biggrin.gif
 
hi

counter gibts doch so viele kostenlos im netz.
kennst dich mit xml aus? das wäre doch mal ne gute möglichkeit hosts mit infos zu speichern
<host ="xy.de">
<zeit>12:00</zeit>
<datum>10.02.07</datum>(oder als timestamp)
<ip>234.234.234.234</ip>
</host>

passwörter und benutername bitte nicht auf ner datei speichern.

aber mein aller grössten vorschlag wäre, setzt dich mal mit mysql in zusammenarbeit mit php (bin aber eher ein postgresql fan) auseinander.

wenn die daten in ner Datenbank (DB) speicherst, solltest du dir wirklich keine performance fragen stellen, ausser du hast millionen von verbindungen die stunde (währ cool wenn du es soweit schaffst).

grüsse
jeliel
 
Wenn du auch noch weiter Daten speicher willst musst du folgendermassen vorgehen:
CODE <?php
/* Du musst Schreibrechte für diese Datei besitzen, in diese Datei wird deine Liste gespeichert */
$file = 'liste.txt';
$zeit = date("F j, Y, g:i a"); // für die Angaben schau auf http://ch2.php.net/manual/de/function.date.php
$ip = $_SERVER['REMOTE_ADDR'];
$datenArray = file($file); // Lädt die Datei in Array

$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$hostliste =array();

foreach ($datenArray as $line) {
$teile = explode("|", $line);
$hostliste[] = $teile[0];
}



if (!in_array($host, $hostliste)) { //Wenn der Host nicht in der Liste auftaucht.
if (!$handle = fopen($filename, "a")) {
echo "Kann die Datei $file nicht öffnen";
exit;
}

if (!fwrite($handle, $host."|".$ip."|". $zeit."|"."\n")) { // Das | Zeichen dient zum trennen
echo "Kann in die Datei $file nicht schreiben";
exit;
}

echo $host . "->Wird hinzugefügt !!!";

fclose($handle);

} else {
echo $host . "->Host ist schon vorhanden !!!";
}
?>

Aber das ganze ist kein wirklicher Counter. Denn jeder User wird nur einemal gezählt auch wenn er am nächsten Tag wieder kommt (ausserdem ist die Host Variable als Kennzeichung für den User nicht sehr geeignet.)

Jeliel hat recht es gibt tausende von gratis counter im netz. Du musst sie ja nicht umbedingt verwenden, aber schau dir einfach mal an wie die das machen. Schau mal hier Wissensdatenbank
Grüsse
Driver
 
Soll ich ein layout fertig machen u.s.w ?Danke !
Das war doch nicht nötig den rest weiss ich ja auch schon (zumindest teoretisch)
aber ich will ja noch lernen
wink.gif


THX
ThePosterity
biggrin.gif
 
Zurück
Oben