Array als File

  • Ersteller Ersteller User0
  • Erstellt am Erstellt am
U

User0

Gast
Hallo Leute, ich verzweifel seid Stunden an einer bestimmten Sache.

Problemquelle:
PHP:
$ban_ip_list = file('config/_ipsperre_member.inc');
$ban_ip_range = file('config/_ipsperre_group.inc');
$user_ip = $_SERVER['REMOTE_ADDR'];
$msg = '<meta http-equiv="refresh" content="0;URL=403.php">';
if(in_array($user_ip, $ban_ip_list)) exit($msg);
if(!empty($ban_ip_range))
{
foreach($ban_ip_range as $range)
{
$range = str_replace('*','(.*)', $range);
if(preg_match('/'.$range.'/', $user_ip))
{
exit($msg);
}
}
}

Erklärung:
$ban_ip_list = einzelne IP's wie (123.123.123.123) // Funktioniert gut
$ban_ip_range = IP-Bereiche wie (123.123.*.*) // Funktioniert nicht

Problem:
Das * ist scheinbar das Problem. // siehe unten EDIT
Ich möchte es aber in einer Datei haben, einmal Gruppe und einmal einzeln.

Wenn ich:
$ban_ip_range = array('123.123.*.*'); // Das geht wieder, beziehe mich aber auf Punkt (Problem).

Frage:
Kann mir jemand helfen so aus dem Stehgreif herraus?


EDIT:
-------


Muss mich korrigieren, scheinbar liesst er in den IP Bereichen (_ipsperre_group.inc) nur die letzte Zeile,
denn wenn ich es imemr mit der letzten gesperrten ip versuche geht es setze ich die Zeile woanders hin dann gehts nicht:

Beispiel: (in der '_ipsperre_group.inc' steht folgendes)

82.165.*.*
72.14.164.*

hier wird nur die letzte IP (Zeile) gesperrt bzw. der bereich, aber nicht die oben steht, also hat es mit dem * gar nichts zu tun, wie kann man das also dann lösen? Hat niemand eine Idee?
 
Zuletzt bearbeitet von einem Moderator:
http://php.net/manual/de/function.file.php

Gibt die Datei in einem Array zurück. Jedes Element des Arrays entspricht einer Zeile in der Datei, ohne dass das Zeilenende entfernt wird. Im Fehlerfall gibt file() FALSE zurück.
...

...
Hinweis:

Jede Zeile in dem resultierenden Array enthält das Zeilenende, außer es wird FILE_IGNORE_NEW_LINES verwendet; daher müssen Sie trim() verwenden, falls das Zeilenende nicht vorhanden sein soll.


Da dürfte in etwa dein Problem stecken.
 
Ich habe gerade tatsächlich bemerkt,
das auch im Fall der einzelnen IP's nur die letzte Zeile in der .inc gelesen wird.

ich schrieb alle iP's in die .inc Zeilenweise ohne , oder . muss doch richtig sein.

EDIT: Danke, aber ich gebe zu ich weiss nicht wie ich das schreiben muss bzw. wie es am ende aussehen müsste! *schäm

Lösung ist/war:
FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES
 
Zuletzt bearbeitet von einem Moderator:
_ipsperre_group.inc
Code:
82.165.*.*
72.14.164.*

PHP:
<?php
	$array = file('_ipsperre_group.inc');
	var_dump($array);
?>

Ausgabe:
Code:
array(2) { [0]=> string(12) "82.165.*.* " [1]=> string(11) "72.14.164.*" }

Es werden doch alle Zeilen gelesen, oder verstehe ich das Problem nicht?
(Der Einfachheit halber habe ich hier trim() weggelassen)
 
Zurück
Oben