/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Server.MapPath VS Request.ServerVariables ~
Fra : OZ


Dato : 21-02-02 13:19

Hej NG

Når man nu har Windows 2000 Pro med IIS5 kørende, så bliver alle ens sites
placeret i forhold til wwwroot strukturen.

Inetpub\wwwroot\site1
Inetpub\wwwroot\site2
Inetpub\wwwroot\site3
osv....

Jeg syntes dog at man løber ind i problemer når man vil connecte til en DB,
normalt bruger man jo Server.Mappath, men det retunerer kun
c:inetpub\wwwroot men ikke den undermappe man er inde i.
Det kan jo rettes rimelig hurtigt ved at tilføje siten til Server.MapPath
altså: Dir= Server.Mappath("/site1/log/butik.mdb"), men gør det lidt
omstændigt....

Ok her er så mine spørgsmål:
1. Kan man på en eller anden måde sætte sine undermapper under wwwroot
(site1, site2, site3 osv), til at være på wwwroot niveau, så jeg kan bruge
ServerMapPath???
2. Er der ulemper ved at bruge Request.ServerVariables
("APPL_PHYSICAL_PATH"), som jo returnerer stien til den mappe jeg står i
eller er det løsningen når man bruger windows 2000 pro...

Med venlig hilsen

Oz



 
 
Stuffy (21-02-2002)
Kommentar
Fra : Stuffy


Dato : 21-02-02 15:41

> Jeg syntes dog at man løber ind i problemer når man vil connecte til en
DB,
> normalt bruger man jo Server.Mappath,

Nej det er nu ikke helt korrekt.
De fleste vil fraråde dig at anvende Server.MapPath da den dræner for mange
ressourcer i forhold til alternativerne.

>men det retunerer kun
> c:inetpub\wwwroot men ikke den undermappe man er inde i.

Det er ikke korrekt.
Den returnerer den fulde sti på det element du mapper - dvs. med undermapper
osv hele vejen ind til elementet.

> 1. Kan man på en eller anden måde sætte sine undermapper under wwwroot
> (site1, site2, site3 osv), til at være på wwwroot niveau, så jeg kan bruge
> ServerMapPath???

Det er ikke nødvendigt.

> 2. Er der ulemper ved at bruge Request.ServerVariables
> ("APPL_PHYSICAL_PATH"), som jo returnerer stien til den mappe jeg står i
> eller er det løsningen når man bruger windows 2000 pro...

ServerVariables skal man ligeledes begrænse brugen af så vidt det er muligt
pga. ressource-forbrug og at de kræver et ekstra round trip.

De er dog enormt praktiske, men jeg vil dog anbefale at inkludere en
config.asp fil øverst på alle dine sider, hvor stien til databasen står i.

Fordelen er at man derved kan nøjes med at redigere i en enkelt fil, hvis
man skal skifte databasen ud med en anden - din løsning kræver at man søger
samtlige dokumenter igennem og udskifter databasen navn.

Eks:

Includefil:

dsn = "sti/db_navn.mdb"


ASP-side:

DB.Open (DSN)

Hilsen Jimmy



OZ (21-02-2002)
Kommentar
Fra : OZ


Dato : 21-02-02 16:48


"Stuffy" <abuse@hotmail.com> skrev:

> ServerVariables skal man ligeledes begrænse brugen af så vidt det er
muligt
> pga. ressource-forbrug og at de kræver et ekstra round trip.
>
> De er dog enormt praktiske, men jeg vil dog anbefale at inkludere en
> config.asp fil øverst på alle dine sider, hvor stien til databasen står i.
>
> Fordelen er at man derved kan nøjes med at redigere i en enkelt fil, hvis
> man skal skifte databasen ud med en anden - din løsning kræver at man
søger
> samtlige dokumenter igennem og udskifter databasen navn.

Hej Jimmy

Tak for dine tips, jeg er helt med på at det indgår i en config.asp fil, da
det ellers er mega træls at finde og rette evt. ændringer på alle sider...

Server.MapPath, retunerer på min windows2000 pro kun c:\inetpub\wwroot
selvom jeg står i en undermappe.... Men lad nu det ligge, fordi
ServerVariables metoden retunerer den rigtige dti for mig, og som du jo
skriver kan den anbefales contra server.mappath.

Tak for rådet =)

Oz





Stuffy (21-02-2002)
Kommentar
Fra : Stuffy


Dato : 21-02-02 22:34

> Server.MapPath, retunerer på min windows2000 pro kun c:\inetpub\wwroot
> selvom jeg står i en undermappe....

Hvordan bruger du den?

Hvad returneres, hvis du skriver følgende:

<%
Response.Write ( Server.MapPath ("test.asp") )
%>

Denne fil kaldes test.asp og lægges i en undermappe.

Du skulle meget gerne få den fulde sti.

Hilsen Jimmy



OZ (22-02-2002)
Kommentar
Fra : OZ


Dato : 22-02-02 11:08


"Stuffy" <abuse@hotmail.com> skrev:

> Hvordan bruger du den?
>
> Hvad returneres, hvis du skriver følgende:
>
> <%
> Response.Write ( Server.MapPath ("test.asp") )
> %>
>
> Denne fil kaldes test.asp og lægges i en undermappe.
>
> Du skulle meget gerne få den fulde sti.

Response.Write ( Server.MapPath ("test.asp") ) giver mig den fulde sti
hmmmmm, hvordan hænger det så sammen i mit tilfælde.....

Jeg prøver lige at forklare mig bedre, jeg tror at det hænger sammen med at
jeg "glemte" at sige at det drejer sig om forskellen på når jeg udvikler
hjemme på min egen server vs når det skal på nettet, det er sikkert en
vigtig detalje at glemme. Men hvorom alting er så forsøger jeg at forklare
mit dilemma og det har sikkert en logisk forklaring også....

Jeg har en site på min server derhjemme som ligger i
c:\wwwroot\inetpub\site1

Når jeg derhjemme skal udvikle site1 skal jeg bruge en måde at angive min
sti til min DB på og en anden måde på nettet, men hvorfor det?

dir.inc indeholder stien til min DB hjemme og på nettet dir inc ligger
c:\inetpub\wwwroot\site1\inc og på nettet ......site1\inc
Hvorfor skal jeg ændre servermappath i forhold til derhjemme for at få det
til at virke?

<%
Dim CurDir
'Home
'curDir = Server.Mappath("\site1\log\test.mdb") retunerer
c:\wwwroot\inetpub\site1\log\test.mdb

'Net
curDir = Server.MapPath("\log\test.mdb") retunerer ....\site1\log\test.mdb,
her finder den altså selv ud af at hente site1 men ikke når jeg gør det
hjemme....
%>

Jeg tror at det er det der er mit egentlige spørgsmål vedr. server.mappath

Med venlig hilsen

Oz




Stuffy (22-02-2002)
Kommentar
Fra : Stuffy


Dato : 22-02-02 13:22

> Når jeg derhjemme skal udvikle site1 skal jeg bruge en måde at angive min
> sti til min DB på og en anden måde på nettet, men hvorfor det?

Det skal du heller ikke nødvendigvis.
Pointen med MapPath er at du _ikke_ behøver at angive absolutte stier, som
jo er forskellige fra hjemme til ekstern server.

> dir.inc indeholder stien til min DB hjemme og på nettet dir inc ligger
> c:\inetpub\wwwroot\site1\inc og på nettet ......site1\inc
> Hvorfor skal jeg ændre servermappath i forhold til derhjemme for at få det
> til at virke?

Se ovenfor.
Note: Brug IKKE .inc, da folk derved kan downloade din config fil - brug
..asp som fortolkes og de derved intet får ud af at hente den.


> <%
> Dim CurDir
> 'Home
> 'curDir = Server.Mappath("\site1\log\test.mdb") retunerer
> c:\wwwroot\inetpub\site1\log\test.mdb
>
> 'Net
> curDir = Server.MapPath("\log\test.mdb") retunerer
.....\site1\log\test.mdb,
> her finder den altså selv ud af at hente site1 men ikke når jeg gør det
> hjemme....
> %>

Jeg kan ikke lige overskue hvad der sker, men jeg vil foreslå følgende:

Læg din database i en undermappe i roden af din server, som hedder database.

Brug følgende i din config.asp:

DB_Path = Request.ServerVariables ("APPL_PHYSICAL_PATH") & "database\db.mdb"

Server.MapPath mapper relativt - dvs. i forhold til hvilken undermappe du
befinder dig i.
Ovenstående metode starter fra bunden og arbejder sig ind.

Note: Giv din database et umuligt-at-gætte navn, da der har været mange
eksempler på at folk har fået deres Access-database downloadet.

Hvis det er muligt skal du naturligvis placere den et sted, hvor der ikke er
HTTP-access.

Hilsen Jimmy



OZ (22-02-2002)
Kommentar
Fra : OZ


Dato : 22-02-02 23:01


"Stuffy" <abuse@hotmail.com> skrev:


> Det skal du heller ikke nødvendigvis.
> Pointen med MapPath er at du _ikke_ behøver at angive absolutte stier, som
> jo er forskellige fra hjemme til ekstern server.

> Se ovenfor.
> Note: Brug IKKE .inc, da folk derved kan downloade din config fil - brug
> .asp som fortolkes og de derved intet får ud af at hente den.

> Brug følgende i din config.asp:
>
> DB_Path = Request.ServerVariables ("APPL_PHYSICAL_PATH") &
"database\db.mdb"
>
> Server.MapPath mapper relativt - dvs. i forhold til hvilken undermappe du
> befinder dig i.
> Ovenstående metode starter fra bunden og arbejder sig ind.
>
> Note: Giv din database et umuligt-at-gætte navn, da der har været mange
> eksempler på at folk har fået deres Access-database downloadet.


Hej Jimmy

Tak for dine tip og råd =), det fik da sat nogle ting på plads for mig.

Hilsen

Oz



Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408939
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste