php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 2 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 16-09-2013, 17:38
Enerkin
 Registrierter Benutzer
Links : Onlinestatus : Enerkin ist offline
Registriert seit: Nov 2004
Beiträge: 226
Enerkin ist zur Zeit noch ein unbeschriebenes Blatt
Standard Regulärer Ausdruck, um zu prüfen, ob eine Url auf localhost verweist

Hallo,

ich möchte mittel Regulärer Ausdrücke prüfen, ob eine URL auf localhost verweist.
Habe mir dazu folgende zwei Regulären Ausdrücke gebastelt:

PHP-Code:
"/\A(http:\/\/localhost)/i" und "/\A(http:\/\/)?127.(\d){1,3}.(\d){1,3}.(\d){1,3}/i" 
Funktioniert soweit ganz gut, allerdings will ich nun noch auschließen, dass es sich dabei um eine Subdomain handelt.

z.B. wird Confixx nach obigem erstem Ausdruck erkannt, obwohl diese ja nicht wirklich auf localhost verweist.

Mein Ansatz ist nun zu verbieten, dass auf obige Ausdrücke ein Punkt folgt. Und da scheitert es.

Habe versucht es mit
PHP-Code:
"[^\.]{1}" 
zu lösen, jedoch ohne Erfolg:

PHP-Code:
"/\A(http:\/\/localhost)[^\.]{1}/i" bzw"/\A(http:\/\/)?127.(\d){1,3}.(\d){1,3}.(\d){1,3}[^\.]{1}/i" 
Weiß jemand einen Rat?
__________________
1123581321
Mit Zitat antworten
  #2 (permalink)  
Alt 16-09-2013, 18:04
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist gerade online
Registriert seit: Mar 2008
Beiträge: 3.576
h3ll befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
$url 'http://localhost/index.php';

$host parse_url($urlPHP_URL_HOST);
$ips gethostbynamel($host);

if (
is_array($ips) && in_array('127.0.0.1'$ipstrue)) {
    echo 
'URL verweist auf localhost.';
} else {
    echo 
'URL verweist nicht auf localhost.';

Mit Zitat antworten
  #3 (permalink)  
Alt 16-09-2013, 18:29
Enerkin
 Registrierter Benutzer
Links : Onlinestatus : Enerkin ist offline
Registriert seit: Nov 2004
Beiträge: 226
Enerkin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Super. Danke.
Hab es noch etwas modifziert, damit auf alle IP Addressen im Bereich von 127.0.0.1 – 127.255.255.254 geprüft werden, und damit auch urls welche nicht mit http:// beginnen funktionieren.
Hier der fertige Code:

PHP-Code:
function is_localhost($url) {
    
    
$url '127.255.255.1/index.php';
    
    
preg_match("/\A(http:\/\/)/"$url$matches);
    if(
sizeof($matches) == 0)
        
$url 'http://'.$url;

    
$host parse_url($urlPHP_URL_HOST);
    
$ips gethostbynamel($host);
    
    foreach(
$ips as $item) {
    
        
$ip_ar explode("."$item);
        if(
$ip_ar[0] == 127 && $ip_ar[3] != 255)
            return 
1;
    
    }
    return 
0;


__________________
1123581321
Mit Zitat antworten
  #4 (permalink)  
Alt 16-09-2013, 18:49
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist gerade online
Registriert seit: Mar 2008
Beiträge: 3.576
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Deine Funktion erlaubt auch kein 127.0.0.255. Außerdem solltest du TRUE oder FALSE zurückgeben und nicht 1 und 0.

PHP-Code:
function is_local_host($hostname) {
    
$ips gethostbynamel($hostname);

    if (
is_array($ips)) {
        foreach (
$ips as $ip) {
            
$long ip2long($ip);
            if (
$long 0x7F000000 && $long 0x7FFFFFFF) {
                return 
true;
            }
        }
    }

    return 
false;
}

$url 'http://127.0.0.1/index.php';
$host parse_url($urlPHP_URL_HOST);

if (
is_local_host($host)) {
    echo 
'URL verweist auf einen lokalen Host.';
} else {
    echo 
'URL verweist auf keinen lokalen Host.';


Geändert von h3ll (16-09-2013 um 18:53 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 16-09-2013, 19:13
Enerkin
 Registrierter Benutzer
Links : Onlinestatus : Enerkin ist offline
Registriert seit: Nov 2004
Beiträge: 226
Enerkin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hoppla, du hast Recht.
Danke für deine Lösung.

Dennoch würde mich immernoch interessieren, was an obigen Regulären Ausdrücken nicht stimmt?
__________________
1123581321
Mit Zitat antworten
  #6 (permalink)  
Alt 17-09-2013, 16:53
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von h3ll Beitrag anzeigen
Deine Funktion erlaubt auch kein 127.0.0.255.

PHP-Code:
function is_local_host($hostname) {
    
$ips gethostbynamel($hostname);

    if (
is_array($ips)) {
        foreach (
$ips as $ip) {
            
$long ip2long($ip);
            if (
$long 0x7F000000 && $long 0x7FFFFFFF) {
// ... 
Besser wäre vermutlich $long <= 0x7fffffff, da sonst deine Funktion auch an 127.255.255.255 scheitert.

Zitat:
Zitat von Enerkin Beitrag anzeigen
Dennoch würde mich immernoch interessieren, was an obigen Regulären Ausdrücken nicht stimmt?
Nichts, da du keine verwendet hast. Das bisschen Pattern-Matching fürs suchen von "http://" am String-Anfang hätte man auch mit den gewöhnlichen String-Funktionen von PHP hinbekommen.

Zitat:
Zitat von Enerkin Beitrag anzeigen
Dennoch würde mich immernoch interessieren, was ... nicht stimmt?
Keine Ahnung, ob deine Lösung mit 127.0.0.255 funktioniert, kannst du ja prima selber ausprobieren.

Aber was ist mit:
Code:
::1
::FFFF:127.0.0.1
::FFFF:7F00:001
Sind das keine Loopback-Adressen, die man in Betracht ziehen sollte?
Oder stellst du durch die Verwendung von parse_url() sicher, dass eine IPv6-Adresse das Script schon vorher abbrechen lässt?

Geändert von fireweasel (17-09-2013 um 19:41 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 17-09-2013, 20:52
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist gerade online
Registriert seit: Mar 2008
Beiträge: 3.576
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von fireweasel Beitrag anzeigen
Besser wäre vermutlich $long <= 0x7fffffff, da sonst deine Funktion auch an 127.255.255.255 scheitert.
War ja so gewünscht.
Mit Zitat antworten
  #8 (permalink)  
Alt 17-09-2013, 21:00
Enerkin
 Registrierter Benutzer
Links : Onlinestatus : Enerkin ist offline
Registriert seit: Nov 2004
Beiträge: 226
Enerkin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von fireweasel Beitrag anzeigen
Besser wäre vermutlich $long <= 0x7fffffff, da sonst deine Funktion auch an 127.255.255.255 scheitert.
Wikipedia: In der Regel ist jede der Adressen von 127.0.0.1 bis 127.255.255.254 (127.0.0.0/8 Subnetz) als Loopback-Device verwendbar.


Zitat:
Nichts, da du keine verwendet hast. Das bisschen Pattern-Matching fürs suchen von "http://" am String-Anfang hätte man auch mit den gewöhnlichen String-Funktionen von PHP hinbekommen.
Sorry, aber das da oben sind eindeutig reguläre Ausdrücke. Und dass es mit String-Funktionen umständlicher geht bezweifelt keiner.

Mir geht es jetzt auch gar nicht darum, wie man obiges IP Problem mit regulären Ausdrücken löst.
Ich will nun lediglich wissen, wie man bei einem regulären Ausdruck ein bestimmtes Zeichen an einer bestimmten Stelle verbietet.

Zitat:
Keine Ahnung, ob deine Lösung mit 127.0.0.255 funktioniert, kannst du ja prima selber ausprobieren.
Dass meine obige Lösung nicht funktioniert sieht man doch.

Zitat:
Aber was ist mit:
Code:
::1
::FFFF:127.0.0.1
::FFFF:7F00:001
Sind das keine Loopback-Adressen, die man in Betracht ziehen sollte?
Oder stellst du durch die Verwendung von parse_url() sicher, dass eine IPv6-Adresse das Script schon vorher abbrechen lässt?
Hab jetzt mal obige Adressen in meine Adresszeilen getippt. Keine davon hat mich zu meinem lokalen Webserver geführt.
__________________
1123581321
Mit Zitat antworten
  #9 (permalink)  
Alt 17-09-2013, 22:05
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Was du suchst, ist eine negative lookahead assertion.
PHP: Assertions - Manual
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #10 (permalink)  
Alt 18-09-2013, 10:58
Enerkin
 Registrierter Benutzer
Links : Onlinestatus : Enerkin ist offline
Registriert seit: Nov 2004
Beiträge: 226
Enerkin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von wahsaga Beitrag anzeigen
Was du suchst, ist eine negative lookahead assertion.
PHP: Assertions - Manual
Danke.

Bekomm es immernoch nicht hin:
PHP-Code:
preg_match("/\A(http:\/\/)?127.(\d){1,3}.(\d){1,3}.(\d){1,3}(?!\.)/i""127.00.235.253.de"$output_array); 
$output_array:
PHP-Code:
Array
(
    [
0] => 127.00.235.25
    
[1] => 
    [
2] => 0
    
[3] => 5
    
[4] => 5

__________________
1123581321
Mit Zitat antworten
  #11 (permalink)  
Alt 20-09-2013, 22:15
Guenni61
 Registrierter Benutzer
Links : Onlinestatus : Guenni61 ist offline
Registriert seit: Nov 2011
Ort: Viersen
Beiträge: 128
Guenni61 befindet sich auf einem aufstrebenden Ast
Standard

Hi,
ich frag' jetzt mal so aus Neugier, worauf das Ganze hinauslaufen bzw. wozu das gut sein soll?
Titel der Frage ist doch: Regulärer Ausdruck, um zu prüfen, ob eine Url auf localhost verweist

Wenn man bei der ganzen Fummelei mit parse_url und gethostbynamel und regulärem Ausdruck als Adresse immer auf
$url = '127.0.0.1/index.php'; oder $url = 'http://localhost/index.php'; prüft, ist doch wohl klar,
dass man zu einem richtigen Ergebnis kommt. Was gibts denn da noch zu prüfen?

Localhost ist der Default-Name des Loopbackadapters eines jeden Rechners, und 127.0.0.1 seine Default-IP-Adresse.
Bei einem Aufruf von localhost antwortet immer das eigene System, genau wie bei ping auf localhost.

Bei einem Aufruf www.meinedomain.de antwortet das System, an das die Anfrage gerichtet ist. Für sich gesehen
greift das entfernte System natürlich auf seine lokalen Resourcen, eben auf Localhost zu.
Läuft dort eine Datenbankanwendung, dann ist es sogar wahrscheinlich, dass in den Scripten als host eben localhost verwendet wird.

Das heißt aber nicht, dass man dieses entfernte System mit http://localhost/index.php erreichen kann.

Das Ergebnis einer Prüfung der Adressen 127.0.0.1/index.php oder localhost/index.php, ob eine URL auf localhost verweist,
sagt mir also nichts anderes als das, was ich sowieso schon weiß. Gebe ich eine solche Adresse ein, verweist diese auf mein System.

Gruß
Günni
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Regulärer Ausdruck: URL Greaseball PHP Developer Forum 2 16-10-2008 14:19
Regulärer Ausdruck um URL zu prüfen klappt nicht korrekt tobiasndw Projekthilfe 0 21-09-2006 13:30
[JavaScript] Prüfen ob eine URL erreichbar ist easore HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 4 08-07-2005 16:46
Regulärer Ausdruck für URL-Vervollständigung tortus@work PHP Developer Forum 7 22-03-2005 11:37
Auf speziellen regulären Ausdruck prüfen Ralf PHP Developer Forum 1 17-05-2004 10:15

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:21 Uhr.