Hallo. Ik ben nieuw op dit forum en ook een beginner met PHP.
Ik ben op het moment een beetje aan het experimenteren met php en wou graag een scriptje maken dat ervoor zorgt dat bepaalde bestanden niet kunnen worden geopend met een browser.
Ik heb dit gemaakt en op elke pagina bovenaan gezet, onder het session_start stukje.
<?php
//Pad van huidig document opvragen
$path = pathinfo($_SERVER['PHP_SELF']);

$dirname = $path['dirname'];
//dirname scheiden met /
$floc = explode('/', $dirname);
//Als het bestand zich in een 2e map bevind
if(!empty($floc[2]))
{
include('../admin/allow.php');
}
else
{
include('admin/allow.php');
}
?>

en admin/allow.php is:
<?php
//Pad van huidig document opvragen
$path = pathinfo($_SERVER['PHP_SELF']);

//Pad dirname en basename samenvoegen
$totalpath = $path['dirname'].'/'.$path['basename'];

//Array aanmaken voor wanneer ingelogd
$logged = array('');
if(isset($_SESSION['login']) && !empty($_SESSION['login']))
{
$logged = array('/Home/uploader.php','/Home/login.php','/Home/admin_gastenboek.php');
}

//Pagina's toegestaan voor iedereen in array zetten
$allow = array('/Home/start.php','/Home/galerie.php','/Home/gastenboek.php','/Home/contact.php','/Home/regels.php','/Home/main_login.php');

//Kijken of het pad is toegestaan
if(!in_array($totalpath, $allow))
{
//Kijken of loggged pad is toegestaan
if(!in_array($totalpath, $logged))
{
//Als file location 2 (dus derde geopende map) niet leeg is
if(!empty($floc[2]))
{
//Locatie naar vorige map verwijzen
header("location: ../start.php");
}
else
{
header("location: start.php");
}
}
}
?>

Ik krijg in Firefox nu een melding dat de pagina niet op de juiste manier doorverwijst en in Internet Explorer een melding dat hij de pagina niet kan weergeven. Alleen in Chrome doet hij het perfect.
Wanneer ik allow.php leeg maak doet hij het wel, maar ik heb geen idee waarom hij verkeerd doorverwijst.
Misschien moet ik er nog bij zeggen dat ik de meeste php bestanden include in de html pagina waardoor hij een paar keer hetzelfde script doorloopt bijvoorbeeld in home/start.php word include('topmenu'); en include('test.php').

Alvast bedankt, Mike
Waarom werk je niet met absolute paden? Dan voorkom je dat je steeds moet kijken hoe diep je zit.

En heb je eventueel een url?
TJVB tvb op 06/07/2011 14:17:45

Waarom werk je niet met absolute paden? Dan voorkom je dat je steeds moet kijken hoe diep je zit.

En heb je eventueel een url?


Absolute? bedoel dan met realpath() ofzo (ik ben nog beginnen) en toen ik zocht naar een manier om de 'path' van een bestand te achterhalen kwam ik uit op pathinfo()

Ik heb geen url ben nog aan het leren en proberen op localhost met xampp
Gebruik $_SERVER['DOCUMENT_ROOT'] voor includes.
Het probleem is opgelost. Het lag niet aan het script, maar aan de browsers zelf. Had mijn laptop steeds op sluimerstand gedaan om gelijk weer verder te kunnen met php. Even reboot en alles werkte weer.

Wel nog even dit. Wanneer ik $_SERVER['DOCUMENT_ROOT'] gebruik geeft hij alleen C:/xampp/htdocs. Hoe kan ik er dan voor zorgen dat er op de juiste manier include word.

Mvg, Mike
$_SERVER['DOCUMENT_ROOT'] .'/map/bestand.php'; zo?

Reageren