Is er een manier om de initiator van een php script te achterhalen?
Ik bedoel: stel, er is een index.html. In deze html zit een link naar mijnscript.php. Is het dan mogelijk om in mijnscript.php te achterhalen dat deze gestart is door index.html
Ik wil er namelijk zeker van zijn dat de script aangeroepen is door index.html en niet dat iemand in een browser de script aan kan roepen.
Kan toch met een <a href="mijnscript.php">klik hier</a> (bijvoorbeeld?)
Wat ik heb gedaan is natuurlijk ook slechts een voorbeeld. Het gaat voor mij om het principe: is het mogelijk om de script/html te achterhalen in een php script, die het script gestart heeft. Je hebt ook __FILE__ die de scriptnaam teruggeeft. Dus zoiets, maar dan de aanroepende file. Ik ben al een hele tijd aan het zoeken op internet, maar nog niets gevonden. Ook met $_SERVER kan je veel opvragen, maar niet de aanroeper. En als het niet kan, dan is dat maar zo.
Dit is slechts een snelkoppeling. Hiermee wordt je pagina nog niet opgevraagd.
Even terug naar het begin...
> Je typt een URL in in je browser, bijvoorbeeld http://mijndomijn.nl/mijnscript.php
> De browser doet een aanvraag (request) aan de webserver
> De webserver ontdekt dat je een URL opvraagt met een .php extensie en zal OP DE SERVER het script starten.
> Als het script beëindigd is (250 milliseconden later) wordt HET RESULTAAT (of de output) van het script teruggestuurd naar de browser.
> De browser bestudeerd dit resultaat en kijkt of het HTML is of een andere data type en als het HTML is dan zal de browser deze HTML parsen ..
PHP werkt en bestaat dus enkel op de webserver. Een client heeft dus eigenlijk geen enkele invloed op een PHP script behalve dan de publiekelijk toegankelijke scripts te kiezen door de juiste URL aan te roepen.
HTTP is stateless (toestandsloos): een individueel HTTP-request wordt los van andere requests beantwoord met een HTTP-response. Wil je een HTTP-systeem in een toestand (state) brengen waarin requests wél afhankelijk zijn van elkaar, dan zul je dat zelf moeten bouwen.
<?php
if ( $_SERVER['HTTP_REFERER'] == '' )
{
echo '<p>Geen referer</p>';
}
if ( $_SERVER['HTTP_REFERER'] <> '' )
{
echo '<p>Komt van <b>' . $_SERVER['HTTP_REFERER'] . '</b></p>';
}
?>
<p>Ga terug naar <a href="mijnscript.html">mijnscript.html</a>.</p>
<p><a href="mijnscript.php">Toon de pagina</a></p>
<p>Of klik in het adresveld van de browser en doe return.</p>
Dank voor alle reacties. De oplossing van Adoptive Solution geeft in beide gevallen "Geen referer". HTTP_REFERER komt ook niet voor bij de server opties.
Ik kreeg altijd van mijn provider een statistiek opgestuurd, met ook vanwaar de website geopend was (dus bijv via Google of een link van een andere pagina). Daarom had ik het vermoeden dat dat ook wordt meegegeven aan het http request en dat het op te vragen is. Blijkbaar is dat niet zo.
Item kan wat mij betreft gesloten worden.
Indien het niet de bedoeling is dat iemand rechtstreeks een PHP-bestand aanroept, omdat deze ingevoegd wordt (een zogenaamde include) in een ander bestand, dan zul je voorzieningen moeten treffen om dit te voorkomen. Dit kun je bijvoorbeeld bewerkstelligen door dit soort bestanden buiten de webdirectory te plaatsen.
Uit het bovenstaande verhaal wordt niet echt duidelijk wat er aan de hand is. Je zou altijd de access- en wellicht ook je errorlogs kunnen raadplegen om te kijken welke pagina's / bestanden worden opgevraagd en welke statussen worden teruggegeven (zie hieronder).
Een bezoeker of bot kan altijd een niet-bestaande pagina opvragen. Hoe jouw website hier op reageert hangt af van hoe deze geprogrammeerd is. Als je bijvoorbeeld niet expliciet een 404 (pagina niet gevonden) HTTP status code teruggeeft dan zou dit zoekmachines kunnen verwarren omdat jouw site net doet alsof deze pagina "bestaat".
NB alle HTTP-directives worden volgens mij gevuld door je browser. Zoals aangegeven zijn deze niet echt betrouwbaar, noch is het gegarandeerd dat deze altijd ingevuld zijn. Je zou dus altijd eerst moeten controleren of een index bestaat met isset().