Newsgroup: it.lavoro.professioni.webmaster
Titolo: .... problemi di map.path

ho un problema che mi sembra alquanto stupido.... ma non lo riesco a
risolvere...
vediamo...
io ho una struttura di cartelle di questo tipo:
spazio
   db  <- cartella č il db
   www   <- cartella in cui punta il dominio insieme all'index
      livello1
        livello2
ora vorrei trovare un metodo per settare la connessione al db
indipendentemente da dove mi trovo all'interno della gerarchia delle
cartelle...
non mi resta che settare la path assoluta che mi porta in "db", ma cosě
vincolo lo script allo spazio in cui viene allocato.
Allora mi viene in mente di utlizzare il metodo math.path("/"), ma in questo
modo io vedrň tutto fin dentro la cartella "www" e non posso risalire in
alcun modo a "db" se non utilizzando (../) cosa che mi fa perdere tutta la
potenza del metodo map.path!
Si accettano suggerimenti!

 wrote

c'č un motivo valido per il quale la tua cartella db la devi mettere li e
non sotto www?
Ad ogni modo potresti fare un tentativo (non ho provato ma credo funzioni)
ti fai il mappath della root "/" per sapere la directory principale, poi ci
appendi un "../db/tuodb"
qualcosa tipo
dim percorso
percorso = Server.MapPath("/")
percorso = percorso & "../db/tuodb"
a questo punto, se tutto funziona come credo/spero, la variabile percorso
punta al percorso assoluto del tuo db
se tutto č ok il "../" nel percorso dovrebbe essere interpretato come "vai
alla directory padre"
comunque ripeto la domanda: hai ragioni particolari per mettere li la tua
cartella db e non metterla invece come figlia della cartella www? (se č un
discorso di sicurezza basta che imposti i permessi della cartella in modo
che un utente non possa scaricare e sei a posto)
-- 
Fabio Angela (aka Red Angel)
cerchi consigli per un hosting? 
http://hosting.redangel.it
http://www.redangel.it
 - il portale sulla programmazione


no.. non funzia....
credo che non mi rimanga che settare connection assolute, e avere due
configurazioni diverse tra locale e remoto
tanto in ultoad le connections non si cambiano mai... e se cambio spazio č
ěda settare solo il file di connessione....

 Si accettano suggerimenti!

 perdere tutta la potenza del metodo map.path!
facendo cosi' rendi altamente insicuro il db... rendendolo accessibili agli
script di qualsiasi sito... quindi credo non ti convenga affatta nua
soluzione come questa... opensource va bene... ma opendata non so... :)
-- 
Lino Mari [mod - it.economia.e-commerce]
http://www.ebow.it
 - e-business on web!
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - d2D004
Gli iperlink sovvertono la gerarchia.


Infatti si.... il punto è che map.path("/") mi restituisce tutta la path
fisica fin dentro www, perchè ovviamene così è configurato il server...  se
risalgo tramite un map.path("../") perdo la fisicità dinamica propria del
map.path, cosa che poi come dice Lino è abbastanza antopatica.... benche
anche il file di connessione sia al di gupori della cartella www
credo che dovrò usar euna classica stringa C:\ ecc. ecc. ed impostarla una
volta per tutte...


no.. perchè cmq la connections è fuori dal www, quindi non è rintracciabile
in alcun modo...

 anche il file di connessione sia al di gupori della cartella www
non devi mica fare un altro server.mappath
non è che hai fatto nuovamente il mappath anche con la soluzione che avevo
improvvisato io?
ad ogni modo se segui il consiglio di Emme, quel che devi fare è, dopo aver
ottenuto il percorso della root, utilizzare la funzione Instr per andare a
cercare la posizione del tuo ultimo / e fare un Left della tua stringa fino
alla posizione del tuo / dopodichè aggiungi il resto del percorso che ti
porta al db (ma senza fare il mappath ovviamente!)
se domani sei ancora nelle curve te lo scrivo io
ciao


 rintracciabile in alcun modo...
non ho detto che sia rintracciabile... ho detto che e' utilizzabile...
-- 
Lino Mari [mod - it.economia.e-commerce]
http://www.ebow.it
 - e-business on web!
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - d2D004
Il risultato č che i mercati stanno diventando piů intelligenti, piů
informati, piů organizzati. Partecipare a un mercato in rete cambia
profondamente le persone.

 porta al db (ma senza fare il mappath ovviamente!)
esattamente, grazie :-)
M.


mmm... spiegami lino... fammi un esempio concreto...
come posso usare un file di inclsione da un server diverso dal mio  in uno
script...
NOn credo sia possibile se un file esterno al mio server dovesse richiamar
euna mia inclusione al di fuori di www il server non risponderebbe nemmeno!

 M.
Teoricamente può funzionare, a già ci ho provato tempo fa e non ci
riuscii...
in ogni caso è una soluzione molto più complicata del cambiare a path
assoluta ad un file magari una volta l'anno...
il gioco non vale la candela...

 assoluta ad un file magari una volta l'anno...
di meglio non so fare....
M.


 ha scritto nel messaggio
news:LVygb.5837$uv4....@news.edisontel.com...

Figurati... ti ringrazio, a te e tutti quelli che ci hanno provato....

cartelle...
temo che non ci si possa fare niente.  che io sappia la connessione al
db dev'essere data da un indirizzo assoluto.  mappath serve, se non
sbaglio, ad assolutizzare un percorso relativo, diciamo così...
quello che io faccio in genere è di includere un file che contiene il
codice che effettua la connessione.  ma anche qui dovrai dare
inclusioni diverse, soprattutto se sviluppi localmente e poi uploadi,
ad es., ammettendo di tenere le routine da includere nella cartella
db, da livello1 dovrai scrivere:
<!-- #include file="../db/routines.asp" -->
da livello2 invece:
<!-- #include file="../../db/routines.asp" -->
sembra che non cambi niente ma alla fine io lo trovo molto più comodo.
--
Se una nazione si aspetta di essere ignorante e libera, 
essa immagina quello che mai è stato e mai sarà. 
Il popolo non può essere sicuro senza informazione. 
Quando la stampa è libera, e ogni uomo è in grado 
di leggere, tutto è sicuro.
(Thomas Jefferson)

 euna mia inclusione al di fuori di www il server non risponderebbe
nemmeno!
credo si riferisse al fatto che altri siti sullo stesso server potrebbero
accedere al tuo db in quanto la directory si trova esterna alla directory
della tua web application e quindi difficilmente la directory DB sarà
accessibile solo dal tuo utente.
Se i permessi li dai tu è un altro discorso ma come soluzione cmq non mi
esalta troppo (poi ovviamente ognuno fa come crede, ci mancherebbe altro :)


 
beh io ho creato un file di include che controlla la servervariable 
SERVER_NAME e se è localhost allora fa una connessione se è 
www.pincopallino.com
 allora cambia la stringa di connessione.
spero di averti aiutato
ciao
Matteo


E cosa mi suggeriresti per una progettazione robusta? Tempo fa leggevo che i
db al di fuori della path del dominio erano molto più sicuri della classica
catella db con i soli permessi di scrittura. Ti basta un admin poco accorto
che sbaglia per mettere a disposizione di tutti i db. Imho se non mi offri
un'alternativa valida non riesco ad immaginare nulla di meglio...
Alla fine l'unica contrinzione è la path completa nelle connections, o
alternativamente un map.path utilizzato come suggerivi su!


ma questo č ovvio Lbo! Altrimenti il file routines.asp dal secondo livello
se usi la opzione 1 non lo vedi proprio!
Il problema č che cosě come l'hai scritto tu, il db non lo trovi e perchč
sia dal livello 1 che dal livello 2 richiami lo stesso file routines.asp nel
quale c'č una posizione relativa se usi map.path... ecco il mio problema...
io prima risolvevo con due file diversi chimati cosě come dicevi tu, es.
routines1.asp e routines2.asp in cui 1 e 2 indicavano il livello... ciň
funziona benissimo e mi fa utilizzare il metodo map.path, ma alo stesso
tempo comporta anche con n db e m livelli  esattamente n*m file connections
differenti!
Quindi la soluzione che ho individuato č avere un solo routines.asp che
punta, quindi al massimo n file connections per n db, ma con path assoluta,
file la cui versione remota e locale non puň coincidere a meno che non
configuri il pc esattamente come il server... e ciň non mi piace! Ma in
definitiva il file connections lo uplodi una sola volta, mentre tutti gli
altri file li cambi spesso... ecco che economizzare di m file non č poco!

"Matteo" <Ferraron...@NOSPAMlibero.it.invalid> ha scritto nel messaggio
news:EQDgb.17315$vO5.6...@twister1.libero.it...

questa è una soluzione che può essere funzionale... meglio del trim e del
left di cui sopra...
me la dovrei cavare con un request e un ciclo if....
mo' ci penso un pò...  cmq grazie!

 Si accettano suggerimenti!
dato che ieri ti ho detto che se oggi non risolvevi ti scrivevo le 3
righe, eccole :P
Dim percorsoDB
percorsoDB = Server.MapPath("/")
percorsoDB = Left(percorsoDB, InStrRev(percorsoDB,"\"))
ora percorsoDB vale, nel tuo caso, supponendo che la partizione su cui
stai sia C:
C:\spazio\
a questo punto e` una cazzata poi aggiungerci il tuo percorso al db
in poche parole devi poi solo fare percorsoDB=percorsoDB & "db\tuodb"
e non dire che cosi` non funziona perche` non ci credo :P
volendo poi basta che il calcolo lo fai nel global.asa durante
l'application_start e ti metti questa variabile nell'oggetto application
cosi` non te lo devi ricalcolare ogni volta (e cosi` eviti anche di usarti
eventuali file esterni che contengono solo il percorso al DB)
-- 
Fabio Angela (Red Angel)
http://www.redangel.it
il portale sulla programmazione
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

configuri il pc esattamente come il server... e ciò non mi piace! Ma in
col sistema di cui sopra te la cavi con il select case sul
server_name...



perfetto.... era proprio quello che cercavo di fare!
tks veryyy muccchhhhh
(p.s.  ma quella tel?)


si si... funzia.... e so contento 1 perchè funzia, 2 perchè è uguale a
quella che avevo fatto io!
grazie mille Red!

 Si accettano suggerimenti!
Ormai il problema lo hai superato (mi sembra). 
cmq.
Incuriosito dall'allungarsi del 3d me lo sono letto, abbastanza velocemente.
Mi sembra saggio il consiglio d L. Mari di mettere il db su un path protetto.
Normalmente uso una include che mi mette la stringa di connessione in una
variabile di application e poi uso sempre quella variabile.
i.e. application("Connessione") = "stringa di connessione"
Sta cosa generalmente la faccio nell'index, quindi una volta sola,  ma sarebbe
addirittura possibile inserirla nel global.asa (quest'ultima cosa rende pero' il
sistema meno duttile).
Tra l'altro uso tale variabile come "trappola", se non esiste vuol dire che non
si e' entrati dall'index (per le web applications, per me, entrare dall'index e'
obbligatorio)
Qual'e' l'unica controindicazione? devo cambiare i dati nell'include se cambio
path o db oppure devo prendere l'index e farlo puntare ad un nuovo include.
Tali modifiche, pero', mi sembra siano necessarie anche con il mappath.
--
a.cara 
Togli qualcosa dall'email

perfetto.... era proprio quello che cercavo di fare!
uh, tra l'altro, dimenticavo, occhio anche al fatto che splitto in un
array la variabile che contiene il nome del db: serve nel caso il file
del db si trovi in una sottocartella della cartella database, ossia,
se hai:
database
   subdirdb1
livello1
   livello2
ecc.
e il db sta in subdirdb1 o da qualche altra parte allora puoi
scrivere:
ApriConnessione cn, "subdidb1;tuodb.mdb"


 Si accettano suggerimenti!
Aggiungo un ulteriore suggerimento. Per proteggere i tuoi database anche in
cartelle pubbliche puoi utilizzare suffissi per il database che sono
filtrati dall'IIS.
Se il tuo database Access lo inserisci nella cartella www (dunque
accessibile con server.MapPath), ma lo rinomini in questo modo:
database.idc
Esso non sarà più scaricabile (parlo dell'IIS 6, con la versione 5 non ho
provato) invocandolo direttamente all'interno del browser, ma sarà
utilizzare senza problemi dall'interno delle tue pagine ASP (modificando
opportunamente il codice).
Se sul server è installato anche il Framework, puoi rinominare il database
anche con suffissi desidegnati al framework, come:
database.asmx
Ed esso sarà controllato e bloccato direttamente dal framework, e sarà
possibile anche monitorizzare qualsiasi tentativo di accesso con la
programmazione di appositi handler.
Ciao
--
AZ [Microsoft .NET MVP]