For at undgå en masse forskellige links ved genbrug af filer og dermed forøget fejlmargin med alle de punktummer fandt jeg løsning i asp.
I asp brugte jeg derfor meget include virtual <!--#include virtual="/sti/evt_fil.asp"-->
I php har jeg forsøgt mig med require("/sti/filnavn.php") og include("/sti/filnavn.php") men det fejler på root kaldet /
<?php include($DOCUMENT_ROOT . "/common/res/inkl/meta.php"); ?> virker ikke
<?php include($DOCUMENT_ROOT . "common/res/inkl/meta.php"); ?> virker ikke
<?php include($DOCUMENT_ROOT . "../res/inkl/meta.php"); ?> virker ...
dvs $DOCUMENT_ROOT . havde ingen indflydelse eller påvirkning på, at kaldet skete fra root !
<?php include("/common/res/inkl/meta.php"); ?> virker ikke
<?php include"common/res/inkl/meta.php"; ?> virker ikke
<?php include"res/inkl/meta.php"; ?> virker ikke
<?php include "../res/inkl/meta.php"; ?> virker !
Men så skal jeg alligevel hele tiden være obs på niveauet (antal ../ ) hvorfra kaldet på incude filen sker - og så er der jo ikke vundet noget :-(
Når man i asp bruger "include virtual" i stedet for "include file", så starter kaldet helt ude fra roden. Det er egentlig den funktion jeg efterlyser - hvis den altså findes ;-)
"Allan Pedersen" <a...@webprofil.com> writes:
> Det virker i øvrigt ingen af delene ...
> <?php include($DOCUMENT_ROOT . "/common/res/inkl/meta.php"); ?> virker > ikke
> <?php include($DOCUMENT_ROOT . "common/res/inkl/meta.php"); ?> virker ikke
> <?php include($DOCUMENT_ROOT . "../res/inkl/meta.php"); ?> virker ...
> dvs $DOCUMENT_ROOT . havde ingen indflydelse eller påvirkning på, at kaldet > skete fra root !
Prøv med $_SERVER['DOCUMENT_ROOT'] i stedet.
> Når man i asp bruger "include virtual" i stedet for "include file",
> så starter kaldet helt ude fra roden. Det er egentlig den funktion
> jeg efterlyser - hvis den altså findes ;-)
Jeg ved ikke om det er et krav med ASP og IIS at scripts skal ligge
indenfor webscope, men det er ihvertfald ikke tilfældet med pache og
php. Egentlig er best practice at lægge så meget som muligt *over*
webscope, og så er document root ikke så vanvittigt interessant. PHPs
include_path direktiv er muligvis mere interessant for dig.
> Når man i asp bruger "include virtual" i stedet for "include file", så > starter kaldet helt ude fra roden. Det er egentlig den funktion jeg > efterlyser - hvis den altså findes ;-)
Det er ikke en speciel funktion. Du skal bare indlede med /. Så
starter du i roden. Hvis det ikke virker, er det stien undervejs
der er forkert.
Er du klar over at PHP arbejder med det fulde mappehierarki selv
om mange af mapperne er lukket af?
HTML derimod starter i webmappen.
Det betyder at "/includefile" tilgår to forskellige mapper
afhængigt af om det er på PHP- eller HTML-niveau. Hypotetisk
eksempel:
Webserveren er sat op med:
/webhotel/basic_folder/user/web/
i den mappe ligger så kundens webfiler (HTML og PHP), og i
/webhotel/basic_folder/user/web/includefiles/
ligger mystylesheet.css. Med PHP:
include "/includefiles/mystylesheet.css";
ledes der så efter en mappe i roden der hedder "includefiles". og
den findes ikke. Det er derfor man har variablen
$_SERVER['DOCUMENT_ROOT']
Den skal skrives sådan. Hvis du ser en anden skrivefom, er den
forældet og virker ikke.
>> Når man i asp bruger "include virtual" i stedet for "include file", så >> starter kaldet helt ude fra roden. Det er egentlig den funktion jeg >> efterlyser - hvis den altså findes ;-)
> Det er ikke en speciel funktion. Du skal bare indlede med /. Så
> starter du i roden. Hvis det ikke virker, er det stien undervejs
> der er forkert.
> Er du klar over at PHP arbejder med det fulde mappehierarki selv
> om mange af mapperne er lukket af?
> HTML derimod starter i webmappen.
> Det betyder at "/includefile" tilgår to forskellige mapper
> afhængigt af om det er på PHP- eller HTML-niveau. Hypotetisk
> eksempel:
> Webserveren er sat op med:
> /webhotel/basic_folder/user/web/
> i den mappe ligger så kundens webfiler (HTML og PHP), og i
> /webhotel/basic_folder/user/web/includefiles/
> ligger mystylesheet.css. Med PHP:
> include "/includefiles/mystylesheet.css";
> ledes der så efter en mappe i roden der hedder "includefiles". og
> den findes ikke. Det er derfor man har variablen
> $_SERVER['DOCUMENT_ROOT']
> Den skal skrives sådan. Hvis du ser en anden skrivefom, er den
> forældet og virker ikke.
Bertel Lund Hansen wrote:
> Undgå parenteser ved include og require. De er overflødige. Det
> er en uskik selv om der findes mange eksempler på nettet.
Ja, selv mange erfarne og dygtige php-udviklere tror der skal parenteser.
Anders Wegge Keller wrote:
> Jeg ved ikke om det er et krav med ASP og IIS at scripts skal ligge
> indenfor webscope, men det er ihvertfald ikke tilfældet med pache og
> php.
Det er på ingen måde et krav i IIS (ASP/PHP/Ruby osv.)
Man lægger NETOP vitale data uden for scope, herunder Access 'databaser',
men amatørerne har typisk lagt den i samme directory som websiden.
Men 'før i tiden' kunne man tilgå selve roden vha IIS, akkurat som man kan
det i dag på Apache (der ikke er ordentligt opsat).