Billige Frage (bitte aber trotzdem helfen! ;-)

Feldhofe

Erfahrenes Mitglied
Hallo!

Ich habe eine Textdatei mit folgendem Inhalt:

PHP:
80.143.233.3|1038336158|19:42:38
80.138.182.57|1038336061|19:41:01
217.3.231.30|1038335989|19:39:49
62.47.272.143|1038336248|19:44:08
212.144.91.130|1038335739|19:35:39
195.53.72.7|1038336064|19:41:04
62.120.9.67|1038336148|19:42:28
195.23.72.6|1038336143|19:42:23
217.425.48.72|1038336298|19:44:58
62.154.211.68|1038335879|19:37:59
195.963.72.8|1038336210|19:43:30
80.143.104.63|1038336196|19:43:16
80.133.107.196|1038335935|19:38:55
195.34.96.89|1038336025|19:40:25
195.36.96.113|1038335947|19:39:07
193.179.34.174|1038336182|19:43:02
193.169.72.104|1038335822|19:37:02

Die Einzelwerte sind die IP, ein Unix-Timestamp und ganz hinten die "normale" Zeit.
Vorhanden sind außerdem die Variable $ip (das ist die IP des Users) und $time (das ist der AKTUELLE Unixtimestamp).

Ich suche nun eine simple (if?)Abfrage,
und zwar soll $userda=yes gesetzt werden,
wenn $ip in einer der Zeilen gefunden wird UND der Unixtimestamp in dieser Zeile älter als 10 Minuten ist.

Wie geht das?
Ich brauche nur die Abfrage!!
Danke für eure Hilfe!!!

Gruß
Feldhofe
 
Ich würde die Datei zeilenweise in ein mehrdimensionales Array einlesen lassen. Die Daten in den Zeilen lassen sich ja schön mit EXPLODE trennen.

Schau Dir mal die PHP-Funktion FOREACH an, mit der Du Arrays abarbeiten kannst:
LINK - KLICKMICH

Jetzt mußt Du nur noch die IP überprüfen und sofern die IP übereinstimmt, noch überprüfen ob der Timestamp älter als 10 Minuten ist:

PHP:
if ($aktuelleip == $arrayip){
     if (($aktuellerTimestamp) < $arrayTimestamp+600){
     # 600 = 10 Minuten in Sekunden
     } else {$userda=yes;}
}

So, hoffe mal ich hab nix verkehrt getippt, bin grad bei der Arbeit und mach das hier zwischendurch :)
 
Hmmm...soweit ist das schon klar; es ging mir da ein bißchen um das zeilenweise Auslesen!

Ich hatte das so probiert,
warum geht das nicht??

PHP:
$afile= file("ips.txt");
$c_jetzt = count($afile);

$a=0;
while($a < $c_jetzt)
{
$bfile = explode("|",trim($afile[$a]));

    if($bfile[0]==$ip AND $bfile[1] > $zeit-600)
    {
      $userda='yes';
    }


$a++;
}

$userda ist hier immer 'yes'. Deshalb funktioniert das nicht.
Ich vermute, die Bedingung wird immer erfüllt, weil immer ENTWEDER die IP in der Datei ODER eine weniger als 10 Minuten alte Zeit da ist.

Sie soll aber nur erfüllt werden, wenn beides IN EINER ZEILE vorkommt!
Wie mache ich das??

Feldhofe
 
Dasselbe Problem:
Die Bedingung wird erfüllt, wenn die IP irgendwo in der Datei vorkommt und irgendwo ein Datum steht, was kleiner als 10min ist -also de facto immer!

Es muß irgendeine Möglichkeit geben, dass das nur erfüllt wird, wenn beides in EINER Zeile vorkommt!

Feldhofe
 
So geht es:
PHP:
$zeit=time();
$datei = file("ips.txt");
$open = fopen("ips.txt", "r");

for($i=0;$i < sizeof($datei); $i++)
{
  if (strpos($datei[$i], $ip) !== false) //wenn sie gefunden wird
    {
    $diezeile = explode("|",trim($datei[$i]));
    $stamp=$diezeile[1];
    if ($stamp > $zeit-600)
       {
       $schondrin='yes';
       }

    }
}

Feldhofe
 
Zurück