Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[PHP] Ingegeven URL opvragen

Anoniem
Annie
26 antwoorden
  • Via .htaccess belandt een aanvraag voor een niet bestaande pagina op de pagina "error404.php". Deze pagina sluist de gebruiker door naar de site-map van mijn site.
    Nu wil ik weten welke foute URL's worden ingegeven. Daarom wordt in error404 met een PHP-script een errorlog geschreven.
    Tot zover gaat alles goed.
    Ik wil nu ook deze foute URL's die worden ingegeven in het logbestand opnemen.
    Vraag: hoe kom ik aan die fout ingegeven URL's?
  • Is het niet veel simpeler om gewoon met je server (error) logs te werken?
  • Gerben bedankt voor de response.

    Daar heb je natuurlijk gelijk in. Maar ik heb drie redenen om zelf iets te maken:
    1. Door het gebruik van .htaccess voor doorsluizing naar de eigen error404-pagina komt er niets in de Errorlog van de server.
    2. Ik bied de bezoekers de service van een duidelijke foutboodschap en een doorsluizing naar de site-map.
    3. Ik vind het gewoon leuk om dit soort applicaties te bouwen.

    Dus gaarne aanbevolen voor tips!
  • Je zou de HTTP_REFERER kunnen uitlezen, maar deze wordt niet gegarandeerd doorgestuurd en is dus niet 100% te vertrouwen. Maar voor logging lijkt me dat niet zo'n probleem.

    Overigens: stuur je bij je custom 404 pagina wel een 404 header mee? Zo nee, als je dat wel toevoegt, wordt er dan nog niets gelogd in je errorlog?
  • Wordt bij die 404 pagina de url ook gewijzigd? Komt een enkele keer wel voor, afhankelijk van de instellingen van de server. Als ie niet gewijzigd wordt, is de url gewoon een van de omgevingsvariabelen, en kan als zodanig opgevraagd worden.
  • Annie
    HTTP_REFERER haal ik op, maar die is tot nog toe leeg.
    Hier de code, die ik gebruik:
    [code:1:87067b608d]
    <?php
    $datum = date("Y-m-d H:i:d");
    $filename = date("Y-m") . ".log";
    $browser = $_SERVER["HTTP_USER_AGENT"];
    $referer = $_SERVER["HTTP_REFERER"];
    $server_name = $_SERVER["SERVER_NAME"];
    $ip = getenv ("REMOTE_ADDR");
    $query_string = $_SERVER["QUERY_STRING"];
    $remote_host = $_SERVER["REMOTE_HOST"];

    if ($file = fopen($filename, "a+"))
    {
    fwrite($file, "$datum,
    ");
    fwrite($file, "Referer: $referer,
    ");
    fwrite($file, "IP-adres: $ip,
    ");
    fwrite($file, "Query String: $query_string,
    ");
    fwrite($file, "Browser: $browser,
    ");
    fwrite($file, "Remote host: $remote_host,
    ");
    fwrite($file, "Server Name: $server_name;
    ");
    fclose($file);
    }
    ?>
    [/code:1:87067b608d]
    Een record uit het resulterende log-bestand:
    [code:1:87067b608d]
    2006-09-08 13:40:08,
    Referer: ,
    IP-adres: 58.187.109.44,
    Query String: ,
    Browser: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Media Center PC 3.0; .NET CLR 1.0.3705),
    Remote host: ,
    Server Name: www.ckweb.nl
    [/code:1:87067b608d]
    Ik hoopte, dat $_SERVER["QUERY_STRING"] zou geven wat ik wilde, maar helaas.

    Ik begrijp niet wat je bedoelt met een "404-header" meesturen. Ik zal even gaan Googlen!

    Gerben
    Wat bedoel je met "Wordt bij die 404 pagina de url ook gewijzigd?"?






  • 404 header is
    [code:1:bf98316c36]header("404 Not Found");[/code:1:bf98316c36]

    iirc
  • Volgens mij is de correcte header
    [code:1:699afd3678]header("HTTP/1.1 404 Not Found");[/code:1:699afd3678]
  • Als ik een custum error404 met .htacces heb, dan veranderd bij mij de url niet. kan je dan niet zoals annie al zij de url niet gewoon zo uitlezen?

    [code:1:0b8d07315a]
    $_SERVER["REQUEST_URI"]
    [/code:1:0b8d07315a]

    kijk anders eens wat je zoek met dit:

    [code:1:0b8d07315a]<?php
    echo '<pre>';
    print_r($_SERVER);
    echo '</pre>';
    ?>
    [/code:1:0b8d07315a]
  • Hartelijk dank voor alle hulp!

    Die header, daar ben ik inmiddels uit. Bij mij gaat het om een html-bestand, extensie .php, met php er in.
    Na flink wat gezoek en proberen heb ik ontdekt, dat je als allereerste regel, dus vòòr <html> en voor <!DOCtype… , moet opnemen:
    <?php header("HTTP/1.1 404 Not Found";); ?>

    Ik had overigens veel profijt van de FireFox-extensie "HeaderGetter" om de Headers te tonen, die de server antwoordt.

    s.Mighty, bedankt voor dat stukje script. Dat ga ik maar eens uitproberen.
  • [quote:2d10ac9028="Chris Kruidenier"]Ik had overigens veel profijt van de FireFox-extensie "HeaderGetter" om de Headers te tonen, die de server antwoordt.[/quote:2d10ac9028]
    Als je in IE werkt, dan kan ik Fiddler adviseren voor het uitlezen van het HTTP verkeer.
  • Annie bedankt voor de tip, maar ik heb IE afgeschaft en elke keer, dat ik een ander met IE zie worstelen, ben ik blij met die beslissing!

    s.Mighty ik heb het script uitgeprobeerd, maar ik ben de URL, die ik intik nog niet tegengekomen. [HTTP_REFERER] blijft leeg. [SCRIPT_FILENAME], [REQUEST_URI], [SCRIPT_NAME], [SCRIPT_URI], [PATH_INFO], [SCRIPT_URL], [PATH_TRANSLATED], [REDIRECT_URL] en [PHP_SELF] geven alle de naam van de error-pagina. [QUERY_STRING] blijft leeg.

    Weet iemand nog andere trucjes?
  • Ik denk dat je dan toch iets niet goed doet… Als je in .htaccess zet…[code:1:716ba3f3d8]ErrorDocument 404 /error/404.php[/code:1:716ba3f3d8]… en in PHP…[code:1:716ba3f3d8]<?php echo $_SERVER["REQUEST_URI"]; ?>[/code:1:716ba3f3d8]… dan zou het allemaal moeten werken, bij mij draait het naar behoren. Let je wel goed op de aanhalingstekens?

    Kijk anders eens wat er allemaal aan de variabele $_SERVER wordt meegegeven met…[code:1:716ba3f3d8]<pre><?php print_r($_SERVER); ?></pre>[/code:1:716ba3f3d8]- Bas
  • BasHamar bedankt voor de sugggestie, maar dat heb ik als gedaan en de resultaten vind je in het bericht boven dat van jou!

    Voor alle duidelijkheid nog even way ik precies wil:

    1. Ik tik in de adresbalk: www.ckweb.nl/foo.html
    (Deze pagina bestaat niet op mijn site.)
    2. In .htaccess staat: ErrorDocument 404 http://www.ckweb.nl/error404.php
    Dus de gebruiker wordt doorgesluisd naar: error404.php.
    3. In error404.php staat o.a.:

    [code:1:d00c6b3c32]
    <?php header("HTTP/1.1 404 Not Found"); ?>
    <!DOCtype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/transitional.dtd">
    <html>
    <!– error404.php –>

    <head>
    <title>
    Error404
    </title>
    .
    .
    .
    </head>

    <body>

    <?php
    $datum = date("Y-m-d H:i:d");
    $filename = date("Y-m") . ".log";
    $datum = date("Y-m-d H:i:d");
    $filename = date("Y-m") . ".log";
    $referer = $_SERVER["HTTP_REFERER"];
    $ip = getenv ("REMOTE_ADDR");
    $request_url = $_SERVER["REQUEST_URI"];
    $query_string = $_SERVER["QUERY_STRING"];
    $browser = $_SERVER["HTTP_USER_AGENT"];
    $remote_host = $_SERVER["REMOTE_HOST"];
    $server_name = $_SERVER["SERVER_NAME"];

    if ($file = fopen($filename, "a+"))
    {
    fwrite($file, "$datum,
    ");
    fwrite($file, "Referer: $referer,
    ");
    fwrite($file, "IP-adres: $ip,
    ");
    fwrite($file, "Request URL: $request_url,
    ");
    fwrite($file, "Query String: $query_string,
    ");
    fwrite($file, "Browser: $browser,
    ");
    fwrite($file, "Remote host: $remote_host,
    ");
    fwrite($file, "Server Name: $server_name;
    ");
    fclose($file);
    }
    ?>
    .
    .
    .
    [/code:1:d00c6b3c32]
    Het volgende record wordt dan geschreven in 2006-09.log
    [quote:d00c6b3c32]
    2006-09-10 11:33:10,
    Referer: ,
    IP-adres: 80.100.30.248,
    Request URL: /error404.php,
    Query String: ,
    Browser: Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6,
    Remote host: ,
    Server Name: www.ckweb.nl;
    [/quote:d00c6b3c32]
    Zoals je ziet geeft $_SERVER["REQUEST_URI"] de naam van de error404-pagina en [b:d00c6b3c32]niet[/b:d00c6b3c32] de ingetikte regel, die verwijst naar een niet bestaande pagina.
    Heeft iemand verder nog ideëen?







  • Probeer eens de gegevens te schrijven vóór je een 404-header verstuurt naar de browser. Het is me sowieso niet helemaal duidelijk waarom dat na de html-inhoud staat. En anders is het misschien een verkeerd geconfigureerde PHP-installatie, want het hoort toch echt te werken:

    Voorbeeld & 404 source

    - Bas
  • Bedankt Bas, maar dat maakt helemaal niets uit!

    Ik heb nu eerst de schrijf-routine geplaatst en daarna de 404-header. Het resultaat is nu:
    [quote:ae38c72a0b]
    2006-09-10 20:53:10,
    Referer: ,
    IP-adres: 80.100.30.248,
    Request URL: /error404.php,
    Query String: ,
    Browser: Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6,
    Remote host: ,
    Server Name: www.ckweb.nl;
    [/quote:ae38c72a0b]
    Dus geen verschil met de vorige keer.
    Je opmerking waarom niet vòòr de html-inhoud is terecht! Bedankt. Ik had me niet gerealiseerd dat dat kon, maar het is natuurlijk logisch!

    Wat beterft het niet goed gefigureerd zijn van PHP, tja daar kan ik weinig aan doen. Ik word gehost door Digitalus, tot nu toe probleemloos. Ik draai geen lokale PHP.

    Dus nog geen oplossing gevonden…

    Chris
  • Heel vreemd. Misschien maak ik me er makkelijk vanaf, maar ik denk toch dat het een configuratiefout is. Met de drie betaalde hosts waarmee ik nu ervaring heb geldt voor elk afzonderlijk dat $_SERVER["REQUEST_URI"] de gevraagde waarde geeft. Misschien een idee om contact om met het bedrijf contact op te nemen? Heb je overigens wel eens phpinfo() geprobeerd? Als je nieuwe info hebt zal ik er graag nog eens naar kijken…

    Voor phpinfo(), maak een leeg PHP-bestand en zet hierin:[code:1:43a4362d05]<?php phpinfo(); ?>[/code:1:43a4362d05]Dit geeft heel veel handige info over onder andere variabelen.

    - Bas
  • Bedankt Bas

    Ik heb gedaan wat je voorstelde, maar er komt een enorme brei aan gegevens. Zou je die eens willen scannen op rare dingen en eventuele oorzaken voor het vreemde gedrag?
    Hierbij de url: http://www.ckweb.nl/phpinfo.php. (Indien dit tenminste vanuit jouw computer ook werkt…)

    Mocht alles normaal zijn, dan zal ik inderdaad eens contact opnemen met Digitalus.

    Vast bedankt voor de moeite!

    Chris
  • Het ziet er normaal voor mij uit, de request_uri en SCRIPT_URI zijn niet leeg, er staat de waarde in zoals die er in hoort te staan.
  • Zou je de code voor phpinfo() misschien even in de 404-error-pagina kunnen plaatsen, dan hebben we er denk ik meer aan… Dan kan ik namelijk een niet-bestaande pagina opvragen en dán kijken of de REQUEST_URI goed wordt weergegeven.

    - Bas

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.