Avatar billede apo Praktikant
23. august 2005 - 14:04 Der er 23 kommentarer og
2 løsninger

Server.MapPath uden for public_html?

Hvordan bruger man Server.MapPath, uden for rodmappen (public_html)?

Jeg har forsøgt med følgende:

Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\www\mitsite.dk\db\Artikler.mdb")

Men det virker ikke...

Apo
Avatar billede softspot Forsker
23. august 2005 - 14:08 #1
Prøv med

server.mappath("/../")

som tager kataloget over roden af webserveren.
Avatar billede medions Nybegynder
23. august 2005 - 14:10 #2
Gør sådan her:

Server.MapPath("../../../../Artikler.mdb")

Det går 4 biblioteker tilbage... og rammer så databasefilen der.

//>Rune
Avatar billede softspot Forsker
23. august 2005 - 14:11 #3
men begge ovenstående forslag fungerer kun hvis serveren tillader "parent paths" (og det er ikke standard tilladt på en Windows 2003 server).
Avatar billede apo Praktikant
23. august 2005 - 14:13 #4
Ingen ændringer...

Min databaser ligger uden for public_html, i mappen db. Hidtil har jeg brugt den absolutte sti men min host har åbenbart ændret på stierne på serveren, og opfordrer nu til at man bruger Server.MapPath.
Avatar billede medions Nybegynder
23. august 2005 - 14:18 #5
Hvis din fil hvor du har koden i ligger i din public_html mappe, skal det se sådan her ud:

Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../db/Artikler.mdb")

//>Rune
Avatar billede apo Praktikant
23. august 2005 - 14:20 #6
Ah, det virkede :-)

Et sidste spørgsmål: Hvis jeg nu vil lægge databasestien i en include, hvordan skal det så se ud, og hvordan kalder jeg databaserne fra en .ASP-fil?
Avatar billede softspot Forsker
23. august 2005 - 14:21 #7
Og hvis det skal fungere uanset hvorfra dit script kalder, bruger du bare den jeg viste i starten:

server.mappath("/../db/artikler.mdb")
Avatar billede apo Praktikant
23. august 2005 - 14:23 #8
softspot > når jeg bruger dit forslag: server.mappath("/../db/artikler.mdb"), får jeg en fejlmeddelelse...
Avatar billede apo Praktikant
23. august 2005 - 14:28 #9
Er der en der kan svare mig på mit sidste spørgsmål?
Avatar billede softspot Forsker
23. august 2005 - 14:29 #10
Hvad er fejlen?
Avatar billede apo Praktikant
23. august 2005 - 14:30 #11
Det var så ikke spørgsmålet ;-)

Men fejlen jeg får når jeg benytter server.mappath("/../db/artikler.mdb"), er:

Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key 'Temporary (volatile) Jet DSN for process 0x578 Thread 0x7b8 DBC 0x251807c Jet'.

/Default.asp, line 83
Avatar billede apo Praktikant
23. august 2005 - 14:52 #12
Da der ikke er nogen bud på mit sidste spørgsmål, lukker jeg her...

Tak for hjælpen til jer begge :-)

// Lukker

Apo
Avatar billede softspot Forsker
23. august 2005 - 14:58 #13
Problemet med brugen af den relative sti er, at du skal specificere den relativt ifht. det script der bruger den, dvs. hvis et script i folderen

/mappe1/script1.asp

bruger server.mappath("../../db/artikler.mdb) for at få fat i databsen, så skal et script der ligger i folderen

/script0.asp

benytte server.mappath("../db/artikler.mdb) for at få fat i databasen. Som du nok kan se er dette ikke egnet til includefiler. Det er derfor jeg gerne vil igennem med den der mappath der tager udgangspunkt i roden af sitet, da den kan bruges alle steder uanset hvilket folderniveau man kalder den fra. Du kan alternativt prøve at hente stien til roden med

server.mappath("/")

og så rette den til så den peger på databasen (altså hardcode, selvom din udbyder fraråder det)... Så kan du bruge den i din include derfra.

Jeg har en metode til at finde den absolutte sti der kombinerer mappath og lidt strengbehandling, men det kræver som udgangspunkt at server.mappath("/") fungerer...
Avatar billede softspot Forsker
23. august 2005 - 14:58 #14
Nååh, der er nok en som har travlt :)
Avatar billede apo Praktikant
23. august 2005 - 16:03 #15
Hehe, jeg regnede med at du var smuttet videre...

Jeg vil gerne give points for din forklaring: http://eksperten.dk/spm/642396

Så må jeg finde en måde at få det til at fungere :-)
Avatar billede softspot Forsker
23. august 2005 - 16:15 #16
Hep! Jeg regner med at du giver lyd hvis du skal have lidt støtte i processen. Jeg har som sagt en metode, som jeg bygger en absolut streng op, hvis parent paths ikke tillades af serveren... sig til hvis det er interessant :)
Avatar billede softspot Forsker
23. august 2005 - 16:15 #17
...men først skal du lige checke om du kan få fat i databasen med en hardcoded sti...
Avatar billede apo Praktikant
23. august 2005 - 17:29 #18
Jeg kender den nye absolutte sti, så jeg kan sagtens få fat på databaserne via den - De har blot tilføjet nogle ekstra tegn til stien.

Men hvis hosten anbefaler at man anvender Server.MapPath må det jo være fordi der kan forventes flere ændringer i stierne på et tidspunkt?
Avatar billede softspot Forsker
23. august 2005 - 18:35 #19
Kunne du få fat i rodkataloget med server.mappath("/")?
Avatar billede apo Praktikant
23. august 2005 - 18:46 #20
Denne virker:
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../db/Artikler.mdb")

men stien i denne:
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("/../db/Artikler.mdb")

virker ikke.

Hvad er rodkataloget helt præcist?
Avatar billede apo Praktikant
23. august 2005 - 18:48 #21
Mener du rodmappen?
Avatar billede softspot Forsker
23. august 2005 - 21:18 #22
Ja.
Avatar billede softspot Forsker
23. august 2005 - 22:03 #23
Jeg har lige prøvet at flikke min egen version af MapPath sammen. Hvis du har lyst kan du jø prøve om det hjælpe noget at bruge den til at finde den absolutte sti til din database (der ligger undenfor roden af websitet):

<%@ language="vbscript" %>
<%
function MapPathX(path)
  if left(path,1) = "/" then
    root = Server.MapPath("/")
    path = right(path,len(path)-1)
  else
    root = Server.MapPath(".")
  end if
 
  vfolders = split(path, "/")
 
  for each folder in vfolders
    if folder = ".." then
      root = left(root, instrrev(root, "\") - 1)
    else
      root = root & "\" & folder
    end if
  next
  MapPathX = root
end function
%>
<html>
  <head>
    <title>customServerMapPath</title>
    <style type="text/css">
        .label { width:300px; }
    </style>
  </head>
  <body>
   
    <span class="label">MapPathX("/test/dude/go/for/it") ==> </span><%=MapPathX("/test/dude/go/for/it")%><br>
    <span class="label">MapPathX("../test/dude/go/for/it") ==> </span><%=MapPathX("../test/dude/go/for/it")%><br>
    <span class="label">MapPathX("../../test/dude/go/for/it") ==> </span><%=MapPathX("../../test/dude/go/for/it")%><br>
    <span class="label">MapPathX("/go/../for/../it") ==> </span><%=MapPathX("/go/../for/../it")%><br>
    <span class="label">MapPathX("/go/../for/../it/man.txt") ==> </span><%=MapPathX("/go/../for/../it/man.txt")%><br>
    <span class="label">MapPathX("/test/dude/go/for/it/man.txt") ==> </span><%=MapPathX("/test/dude/go/for/it/man.txt")%><br>
    <span class="label">MapPathX("/../dude/go/for/it/man.txt") ==> </span><%=MapPathX("/../dude/go/for/it/man.txt")%><br>

  </body>
</html>
Avatar billede softspot Forsker
23. august 2005 - 22:04 #24
Denne version benytter sig ikke af parentpaths i Server.MapPath og har derfor (måske) en mulighed for at slippe udenom den begrænsning som den IIS ellers lægger på MapPath...
Avatar billede apo Praktikant
27. august 2005 - 15:25 #25
Softspot > Jeg tester det lige når jeg får tid, tak skal du have :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester