Hi!
[code lang=php]$ip_port = explode(":", $_POST['Proxy']);
$ip_arr = explode('.',$ip_port[0]);
$port = $ip_port[1];
Geht etwas einfacher, wobei wie in deinem Code Voraussetzung ist, dass immer ein Port angegeben ist:
list($ip, $port) = explode(":", $_POST['Proxy']);
$ip_arr = explode('.', $ip);
Kennst du das Kurzschluss-Verfahren? Wenn für einen booleschen Ausdruck bereits feststeht, dass der Rest am Ergebnis nichts mehr ändern kann, wird er nicht weiter ausgewertet.
if ($ip_arr[0]<=255 && $ip_arr[1]<=255 && $ip_arr[2]<=255 && $ip_arr[3]<=255 && count($ip_arr) <= 4 &&
Du solltest hier zuerst auf die Länge 4 testen, und zwar nicht nur kleiner oder gleich, sondern genau 4. Wenn das nicht der Fall ist, kann sich PHP den Rest sparen und greift auch nicht auf dann nicht vorhandene Elemente in $ip_arr zu (spart Notice-Meldungen).
is_numeric($ip_arr[0]) && is_numeric($ip_arr[1]) && is_numeric($ip_arr[2]) && is_numeric($ip_arr[3]) && is_numeric($port) && $port <= 9999 &&
Als zweites ist die is_numeric()-Prüfung sinnvoll. is_numeric() lässt aber auch Zahlen in ungewünschter Darstellung durch, wesewgen es nur begrenzt sinnvoll ist. Hier würde ich dann doch zu einem Regexp greifen, da der die Zeichen in einem Rutsch prüfen kann.
preg_match("!^([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})$!",$ip_port[0])) {
Hast du ja schon drin, also kann die is_numeric-Prüfung weg. Der Port geht übrigens bis 65535. [0-9] kann zu \d abgekürzt werden, die Gruppierung kann entfallen.
Oder aber, du lässt sie drin und nimmst (ohne die explode()s) die Reg-Exp-Prüfung als erste (inklusive 1-5 Ziffern für den Port). Die stellt sicher, dass nur Ziffern enthalten sind und die IP nebst Port strukturell richtig ist. Mit den Gruppen kannst du anschließend die Grenzwerteinhaltung prüfen.
Lo!