Jeg vil lige kort forklare forskellen på de to include former :
<!-- #include file="mappenavn/filnavn.asp" -->
og :
<!-- #include virtual="/mappenavn/filnavn.asp" -->
Når man bruger "file" er det en relativ angivelse af stien til filen der skal bruges. I "file" modellen må man desuden indføje 2 punktummer (..) for at angive forældre mappen til den mappe man befinder sig i lige nu. Benyttelse af 2 punktummer i den slags sti-angivelser, kaldes på webserveren for "Parent Paths" (forældre stier). Flere og flere lærer af grusomme fejltagelser ved at give alle og enhver lov til at bruge "Parent Paths" - altså at angive 2 punktummer (..) i en sti. Derved kan en fiks programmør nemlig via "Parent Paths" tiltvinge sig adgang på hele det drev hans kode kører på - dvs. alle andres webhoteller osv.
Når man bruger "virtual" er det en absolut - altså bestemt - angivelse af stien til filen der skal bruges. I "virtual" modellen må der som regel ikke startes med andet end en skråstreg (/). Den første skråstreg fortæller webserveren, at den skal starte sin søgen efter filen, i roden af webhotellet (svarer til C:\), derefter skal den finde "mappenavn" der skal befinde sig i roden, og inde i "mappenavn" mappen skal den så lede efter "filnavn.asp".
Ok - forklaring - hvad med løsning ?
Lad os se denne model engang :
(1) / <--- roden af dit webhotel =
http://www.dinside.dk/ (2) /default.asp <--- din forside =
http://www.dinside.dk/default.asp (3) /mappenavn <-- en mappe du har nogle flere sider i =
http://www.dinside.dk/mappenavn/ (4) /mappenavn/filnavn.asp <--- en fil placeret i denne mappe =
http://www.dinside.dk/mappenavn/filnavn.asp (5) /scriptmappe <-- en mappe =
http://www.dinside.dk/scriptmappe/ (6) /scriptmappe/her/ <-- en mappe du har et script i =
http://www.dinside.dk/scriptmappe/her/ (7) /scriptmappe/her/mitscript.asp <-- det script der skal inkludere "filnavn.asp" -->
http://www.dinside.dk/scriptmappe/her/mitscript.asp (Håber ikke det virker for uoverskueligt)
I "mitscript.asp" står der i linie 1 :
<!-- #include file="../mappenavn/filnavn.asp" -->
Det betyder at den skal skifte til sin forældremappe (der i dette tilfælde er /scriptmappe/ - vi står i /scriptmappe/her/ lige nu). I forældremappen skal den så finde en mappe der hedder "mappenavn" - og her går det så galt. Vores start-sted er (6), vi beder om at skifte op til forældremappen og havner så i (5), men vi skulle jo have været helt op til (1) for at vi kan finde "mappenavn"-mappen og inde i den "filnavn.asp" filen vi skal bruge. Ikke så godt ...
Vi udskifter så linie i "mitscript.asp" med denne linie i stedet for :
<!-- #include virtual="/mappenavn/filnavn.asp" -->
Det betyder at serveren skal benytte virtuelle stier, der alle har et fast start-sted, nemlig roden (1). Vi er jo stadig i samme script så vi befinder os i (7) og vi skal have fat i (4). Den første skråstreg fortæller serveren, at den skal springe helt tilbage til roden af webhotellet - altså (1). Der skal den lede efter en mappe der hedder "mappenavn" (3) og inde i den skal den finde en fil der hedder "filnavn.asp" (4). All done.
Når du skal ud og hente include-filer forskellige steder, er det vigtigt at du først og fremmest ved hvor scriptet ligger i forhold til den fil du inkludere. Ligger det hele i samme mappe, kan du bare bruge #include file="filnavn.asp" og inkludere den samme sted, for så sparer du serveren for en smule søgearbejde. På store sites kan ting som dette gøre en forkel på 1-2 sekunders ekstra load-tid ved hård belastning.
Hvis du derimod ved at den ligger et helt andet sted, ovenover den mappe scriptet er i, vil jeg anbefale dig at bruge #include virtual="/mappe/filnavn.asp" for så skal du ikke spekulere på hvad der sker når du på et tidspunkt beslutter dig for at flytte "mitscript.asp" over i en anden mappe. Så længe du ikke flytter på (4) vil din #include virtual altid virke, uanset hvor i din struktur du end også befinder dig :+)