Archief - PHP: pagina alleen zichtbaar via includes

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

WooZ

Legacy Member
Howdy,
ik ben op zoek naar een manier zodat een bepaalde pagina alleen bekeken kan worden via een include, en dus niet 'stand-alone' om het zo te zeggen. Weet iemand hoe ik dat kan bereiken? Google heeft nog niks opgeleverd. Thanks.

DarkBone

Legacy Member
Der zit weinig anders op dan dat in de geïncludeerde pagina zelf te controleren vrees ik.
Dit kun je doen door naar de url te kijken en na te gaan wat de pagina is.

Stel dat je index.php alle pagina's includeert, dan zou je op iedere te includeren pagina zoiets moeten toevoegen:
PHP:
<?php
if (basename($_SERVER['PHP_SELF']) != 'index.php')
{
     die('No direct access allowed!');
}
?>
Je kan natuurlijk ook alle pagina's die je wilt includeren samen in een map 'includes' steken, en daar dan een .htaccess bijvoegen die geen toegang tot de bestanden toelaat.

dJeez

Legacy Member
Een courant gebruikte manier is om in de file vanwaaruit geïnclude wordt een constante te definiëren. In het verplicht te includen bestand kijk je dan eerst na of die constante gedefinieerd is, en als dat niet het geval is - maw als dat script rechtstreeks werd aangeroepen - stop je de verdere verwerking.

killgore

Legacy Member
verduidelijking bij hierboven:

in pagina die geinclude files toont:

#define("IN_MY_SITE",true);


in pagina die geinclude wordt en enkel geinclude mag getoont worden:

if(!defined("IN_MY_SITE")) die 'hacking attempt';

Lashknife

Legacy Member
wa's het verschil met
$includetest = true; in parent document
if (!isset($includetest)) { exit(); } in included document

tov define? (nu we toch niet meer met register_globals werken dus er niet meer met url kan gefoefeld worden?)

dJeez

Legacy Member
Lashknife zei:
wa's het verschil met
$includetest = true; in parent document
if (!isset($includetest)) { exit(); } in included document

tov define? (nu we toch niet meer met register_globals werken dus er niet meer met url kan gefoefeld worden?)
De scope is verschillend (constanten hebben een globale scope - ze gelden dus overal - vars niet), en aangezien het toch een constante waarde is kan je die beter ook als dusdanig definiëren :p.

killgore

Legacy Member
Lashknife zei:
wa's het verschil met
$includetest = true; in parent document
if (!isset($includetest)) { exit(); } in included document

tov define? (nu we toch niet meer met register_globals werken dus er niet meer met url kan gefoefeld worden?)
eenmaal mijn var bepaald kan je ze niet wijzigen (tenzij je ze undefined ;)).

jouw var is nog wijzigbaar
dJeez zei:
De scope is verschillend (constanten hebben een globale scope - ze gelden dus overal - vars niet), en aangezien het toch een constante waarde is kan je die beter ook als dusdanig definiëren :p.
vars hebben geen global scope (tenzij je er global bijzet), maar ter verduidelijking: een var gedeclareerd in een include is nog bruikbaar in de file waarin geinclude wordt ;) (bv. vele config-bestanden met mysql user & pass).

killgore

Legacy Member
dJeez zei:
@killgore:
Ik denk dat je de verkeerde hebt gequote :p.
nee, kwou eigenlijk gewoon iet over die scope zeggen, ma der zijn wa dingen bijgekomen :p

edit: zo beter :p?

Lashknife

Legacy Member
mja, same shit want undefine en nieuwe define of var wijzigen, same shit uiteindelijk eh

maar global aspect is wel interessant want dan moet ge in een function geen global voor uw var meer zetten

killgore

Legacy Member
Lashknife zei:
mja, same shit want undefine en nieuwe define of var wijzigen, same shit uiteindelijk eh

maar global aspect is wel interessant want dan moet ge in een function geen global voor uw var meer zetten
een gewone var kunde "per ongeluk" wijzigen (stel dat je voor een algoritme een var gebruikt waar je zonder nadenken de zelfde naam aan toekent). Dit kan je dus niet tegenkomen met defines ;).

Lashknife

Legacy Member
per ongeluk... :ironic: zo'n foutjes maak ik ni, ik let nogal op mijn var-namen

ma kga evengoe vanaf nu daarvoor define gebruiken ze, lijkt me handig en valt veel harder op dan "weer een var"

PerfectPC

Legacy Member
wat een idee om in elke pagina een aanpassing te moeten maken...
hernoem uw paginas naar.inc.php of gelijk wat, en geef via .htaccess een deny op die extensie ;)

<Files ~ "\.inc.php$">
Order allow,deny
Deny from all
</Files>
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan