kostenloser Webspace werbefrei: lima-city


Prüfen ob externe Seite oder Bild online ist ?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    thumbshots

    thumbshots hat kostenlosen Webspace.

    Hallo

    wie kann ich eine (externe) Link-Adresse prüfen
    ob die verlinkte Seite auch online / erreichbar ist ?

    ich will damit verhindern, dass jemand eine URL eintragen kann,
    die zwar von der Syntax her valide ist, aber eben doch nicht existiert.

    also damit sowas:
    http://abcdefghijk.de/uvwxyz.htm
    als "nicht Online" erkannt wird,
    und ich somit das Speichern abbrechen / verhindern kann.

    auch wenn die URL auf eine .pdf zeigt soll der Link, wenn erreichbar, angenommen werden

    das brauche ich dann am besten nochmal extra für Bilder
    zum Prüfen, ob hinter der URL eine "erlaubtes" Bild"steckt. (und erreichbar ist)

    als Bild würde ich gerne nur die Formate jpg, png und gif akzeptieren
    .. .oder was sind noch andere gängige Online Bild-Formate ?

  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Das kannst du prüfen, indem du mit cURL o.ä. die Seite abrufst.

    Vllt bekommst du hier oder hier noch Ideen.
  4. Autor dieses Themas

    thumbshots

    thumbshots hat kostenlosen Webspace.

    Danke

    ich habe jetzt das hier zusammen bekommen:

    <?php 
    // --------------------------------------------------------- 
    
    function is_url_valide($url) { 
    	
    	$valide = true; 
    	
    	if(filter_var($url, FILTER_VALIDATE_URL) === false) { $valide = false; } 
    	
    	preg_match_all('|^(.*?)://.*|', $url, $matches);
    	if($matches[1][0] != 'http') { $valide = false; } 
    	
    	return($valide); 
    }
    
    
    // --------------------------------------------------------- 
    
    
    function get_url_status($url) { 
    	
    	if (is_url_valide($url) === false) { $http_code = 0; } 
    	else { 
    	$ch = curl_init($url); 
    	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    	curl_setopt($ch, CURLOPT_NOBODY, 1); 
    	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    	curl_setopt($ch, CURLOPT_VERBOSE, false);
    	curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    	curl_exec($ch); 
    	
    	$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    	curl_close($ch); 
    	}
    	
    	return $http_code; 
    }
    
    // --------------------------------------------------------- 
    
    
    $linkurl = 'http://www.lima-city.de'; 
    
    
    $url_status = get_url_status($linkurl); 
    
    
    // --------------------------------------------------------- 
    
    if (empty($url_status) || $url_status == '0') { 
    
    	print "<p>Fehler ... die URL: ".$linkurl." ist nicht VALIDE.</p>\n"; 
    	print "<p>Status: ".$url_status."</p>\n"; 
    
    } 
    elseif ($url_status >= 200 && $url_status < 300) { 
    
    	print "<p>OK ... die Seite: ".$linkurl." ist erreichbar (Online).</p>\n"; 
    	print "<p>Status: ".$url_status."</p>\n"; 
    
    }
    else { 
    
    	print "<p>NEIN ... die Seite: ".$linkurl." ist NICHT erreichbar.</p>\n"; 
    	print "<p>Status: ".$url_status."</p>\n"; 
    
    }
    
    // --------------------------------------------------------- 
    
    
    print "<br />\n"; 
    print "<br />\n"; 
    print "<br />\n"; 
    
    
    // --------------------------------------------------------- 
    ?>



    aber ich bekomme noch eine Fehler-Meldung:

    Warning: curl_setopt() ... CURLOPT_FOLLOWLOCATION cannot be activated when safe_mode is enabled


    Aber wenn ich CURLOPT_FOLLOWLOCATION weg lasse,
    dann bekomme ich bei Weiterleitung ja noch nicht die Info,
    ob die URL zu der weiter geleitet wird dann auch Online ist ?!

    also nur die "halbe Miete" .... :( ... any Ideas ?!
  5. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    thumbshots schrieb:
    Aber wenn ich CURLOPT_FOLLOWLOCATION weg lasse,
    dann bekomme ich bei Weiterleitung ja noch nicht die Info,
    ob die URL zu der weiter geleitet wird dann auch Online ist ?!

    also nur die "halbe Miete" .... :( ... any Ideas ?!
    Du könntest dann den Header "auseinandernehmen" und die neue Location wieder mit dieser Funktion aufrufen.
  6. Erstelle eine ".htaccess"-Datei mit folgendem Code und speichere diese in dem Verzeichnis Deines Scripts ab. Damit deaktivierst Du den safe_mode...
    php_value safe_mode off
  7. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    staymyfriend schrieb:
    Erstelle eine ".htaccess"-Datei mit folgendem Code und speichere diese in dem Verzeichnis Deines Scripts ab. Damit deaktivierst Du den safe_mode...
    php_value safe_mode off
    Nette Idee, funktioniert aber eher nicht: Die Dokumentation sagt, dass das nur in der httpd.conf oder php.ini festgelegt werden kann (welchen Sinn hätte das sonst auch?)
  8. Du probierst das aber nicht bei Lima-City, oder? Läuft hier nicht PHP 5.4?
  9. Autor dieses Themas

    thumbshots

    thumbshots hat kostenlosen Webspace.

    Hallo

    habe jetzt ne Lösung, ... wenn REDIRECT vorhanden, dann Funktion erneut aufrufen.

    <?php 
    // --------------------------------------------------------- 
    
    // ------- Check this URL Status (is online?) -------
    $linkurl = 'http://heise.de'; 
    
    // --------------------------------------------------------- 
    
    function is_url_valide($url) { 
    	
    	$valide = true; 
    	
    	if(filter_var($url, FILTER_VALIDATE_URL) === false) { $valide = false; } 
    	
    	preg_match_all('|^(.*?)://.*|', $url, $matches);
    	if($matches[1][0] != 'http') { $valide = false; } 
    	
    	return($valide); 
    }
    
    
    // --------------------------------------------------------- 
    
    
    function get_redirect_url($header) {
        if(preg_match('/^Location:\s+(.*)$/mi', $header, $m)) {
            $out = trim($m[1]);
        }
    	else { $out = ''; } 
    
        return $out;
    }
    
    
    // --------------------------------------------------------- 
    
    
    function get_url_status($url) { 
    	
    	if (is_url_valide($url) === false) { $http_code = 0; } 
    	else { 
    	$ch = curl_init($url); 
    	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    	curl_setopt($ch, CURLOPT_NOBODY, 1); 
    	curl_setopt($ch, CURLOPT_HEADER, 1);
    ## 	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    	curl_setopt($ch, CURLOPT_VERBOSE, false);
    	curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    	$content = curl_exec($ch); 
    	$curlnfo = curl_getinfo($ch); 
    
    	$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    	curl_close($ch); 
    
    	}
    
    	if ($http_code > 300 && $http_code < 400) { 
    		if(!isset($curlnfo['redirect_url'])) {
    			$curlnfo['redirect_url'] = get_redirect_url($content);
    		}
    		get_url_status($curlnfo['redirect_url']); 
    	}
    
    	return $curlnfo; 
    
    
    }
    
    // --------------------------------------------------------- 
    
    
    
    function show_url_status($linkurl) { 
    
    $url_info = get_url_status($linkurl); 
    
    /* -------- DEBUG -------- 
    print "<br />\n"; 
    print "<pre style=\"margin:6px; padding:4px; background:#DEDEDE; color:#000000; text-align:left;\">\n"; 
    print_r($url_info); 
    print "</pre>\n"; 
    print "<br />\n"; 
    ------------------------- */
    
    
    $url_status = $url_info['http_code']; 
    $url_redirect = $url_info['redirect_url']; 
    
    // --------------------------------------------------------- 
    
    if (empty($url_status) || $url_status == '0') { 
    
    	print "<p>Fehler ... die URL: ".$linkurl." ist nicht VALIDE.</p>\n"; 
    	print "<p>Status: ".$url_status."</p>\n"; 
    
    } 
    elseif ($url_status >= 200 && $url_status < 300) { 
    
    	print "<p>OK ... die Seite: ".$linkurl." ist erreichbar (Online).</p>\n"; 
    	print "<p>Status-Code: ".$url_status."</p>\n"; 
    
    } 
    elseif ($url_status > 300 && $url_status < 400) { 
    
    	print "<p>Naja ... die Seite: ".$linkurl." wird umgeleitet zu ".$url_redirect." (REDIRECT).</p>\n"; 
    	print "<p>Status-Code: ".$url_status."</p>\n"; 
    	show_url_status($url_redirect); 
    
    }
    else { 
    
    	print "<p>NO ... die Seite: ".$linkurl." ist NICHT erreichbar.</p>\n"; 
    	print "<p>Status-Code: ".$url_status."</p>\n"; 
    
    }
    
    print "<br />\n"; 
    print "<br />\n"; 
    print "<br />\n"; 
    
    }
    
    // --------------------------------------------------------- 
    
    
    show_url_status($linkurl); 
    
    print "<br />\n"; 
    print "<br />\n"; 
    print "<br />\n"; 
    
    
    // --------------------------------------------------------- 
    ?>


    bei jedem erkannten REDIRECT wird die Funktion show_url_status neu aufgerufen
    und diese ruft wiederum get_url_status auf ... usw ...

    bei jdedem REDIRECT also neue Ausgabe ....
    man (ich) solte da jetzt vielleicht noch einen Zähler für maximale REDIRECTS einbauen

    ... aber so funktioniert es schonmal :=) ... ganz doll freu :=)

    Ausgabe mit
    $linkurl = 'http://heise.de';
    ... siehe TEST

    Naja ... die Seite: http://heise.de wird umgeleitet zu http://www.heise.de/ (REDIRECT).
    
    Status-Code: 301
    
    OK ... die Seite: http://www.heise.de/ ist erreichbar (Online).
    
    Status-Code: 200



    PS: ja, ich probiere es auf Lima-City ... siehe TEST
    ... und auf Lima-City läuft zur Zeit: PHP Version 5.3.21 ... siehe phpinfo()

    Umstellung auf PHP 5 kommt wohl Mitte Mai ... siehe Blog: neue-php-version-5-4-im-mai


    :)


    Beitrag zuletzt geändert: 25.3.2013 22:11:28 von thumbshots
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!