Verificare l`esistenza di una unità disco

Verificare l'esistenza di una unità disco
Per verificare se una specifica unità disco è presente sul server è possibilie sfruttare il metodo
DriveExists dell'oggetto FileSystemObject. Il parametro di questo metodo è di tipo stringa e contiene la
lettera dell'unità drive. Se il drive esiste, il metodo FileExists restituisce True, in caso contrario restituisce
False.
In questo script di esempio, verifichiamo la presenza dell'unità disco "D:" :
<%
Dim objFile
Set objFile = Server.CreateObject ("Scripting.FileSystemObject")
If objFile.DriveExists ("D:") Then
Response.Write "Il drive specificato è presente sul server."
Else
Response.Write "Il drive specificato NON è presente sul server."
End If
Set objFile = Nothing
%>
Creare una directory sul server
Creare una nuova directory sul server tramite uno script ASP è piuttosto rapido, e richiede l'utilizzo
dell'oggetto FileSystemObject. Da sottolineare che la directory dovrà essere creata in una cartella in cui si
hanno i permessi in scrittura; in caso contrario il processo fallirà, e verrà segnalato un messaggio
d'errore.
Ecco il listato da utilizzare:
<%
Dim newdir
newdir = "/public/newfolder"
Dim objFile
Set objFile = Server.CreateObject("Scripting.FileSystemObject")
objFile.CreateFolder Server.MapPath(newdir)
Response.Write "Directory creata"
%>
In questo caso viene creata la sottodirectory newfolder all'interno della directory public (già esistente).
Conversioni fra tipi di dato
Il tipo di variabile più usata in Vbscript è il variant. Ecco le varie funzioni per convertire i tipi presenti in
Vbs:
<%
'Conversione in Boolean
Dim A,B,Controllo
Controllo= CBool(A=B)
'Conversione in Byte
Dim Num,NumByte
Num= 125.5678
NumByte = CByte(Num)
'Conversione in Date
Data = "October 19, 1962"
Data_Convertita = CDate(Data)
Tempo= "4:35:47 PM"
Tempo_Convertito = CDate(Tempo)
'Conversione in Double e Currency
Dim Curr,Doub
Curr = CCur(234.456784)
Doub = CDbl(Curr * 8.2 * 0.01) 'Conterrà (19.2254576)
'Conversione in Int
Dim Intero
Doub = 2345.5678
Intero = CInt(Doub) 'Conterrà (2346)
'Conversione in Long
Dim Val1, Val2, Long1, Long2
Val1 = 25427.45
Val2 = 25427.55
Long1 = CLng(Val1) 'Conterrà (25427)
Long2 = CLng(Val2) 'Conterrà (25428)
'Conversione in Single
Dim Doub1, Doub2, Single1, Single2
Doub1 = 75.3421115
Doub2 = 75.3421555
Single1 = CSng(Doub1) 'Conterrà (75.34211)
Single2 = CSng(Doub2) 'Conterrà (75.34216)
'Conversione in String
Doub = 437.324
Stringa = CStr(Doub) 'Conterrà ("437.324")
%>
Scambiare il contenuto di due variabili
I programmatori "storici" del Basic (come il sottoscritto) ricorderanno sicuramente come il GWBASIC
mettesse a disposizione la funzione [Swap var1, var2] per scambiare il contenuto di due variabili
("swap" significa scambio).
Questa comodissima funzione scomparve poi misteriosamente con l'introduzione del Visual Basic (fu
letteralmente "dimenticata" dalla Microsoft).
Naturalmente questa "mancanza" è stata tramandata fino al VBScript, con cui solitamente sviluppiamo le
nostre pagine ASP.
Quindi dobbiamo crearci una funzione ad hoc (più corretto sarebbe dire "procedura").
Ecco la versione "classica", che fa uso di una variabile temporanea (altresì detta variabile d'appoggio):
<%
Sub Swap(a, b)
Dim temp
temp = a
a=b
b = temp
End Sub
%>
La versione seguente permette di eliminare la variabile d'appoggio, ma può usarsi soltanto con variabili
di tipo numerico (sia di tipo intero che a virgola mobile):
<%
Sub Swap1(a, b)
a=a+b
b=a-b
a=a-b
End Sub
%>
L'ultima versione che vi presento è quella che io considero più "elegante" ed è specificatamente
ottimizzata per variabili di tipo numerico intero:
<%
Sub Swap2(a, b)
a = a Xor b
b = b Xor a
a = a Xor b
End Sub
%>
Interessante ed educativa sarebbe una spiegazione di come la Swap2, tramite l'operatore logico XOR,
effettui lo scambio. Ma questo andrebbe oltre lo scopo di questo articolo.
Settare le impostazioni internazionali
In ASP è possibile settare le impostazioni internazionali, che tra l'altro riguardano anche il formato di
valuta e data, tramite la proprietà LCID dell'oggetto Session.
Ecco un esempio in cui questa proprietà viene settata in modo che vengano utilizzate le impostazioni
italiane standard:
<%
Session.LCID = 1040
%>
Ecco la tabella con tutti i valori corrispondenti:
Locale
Description
Afrikaans
Albanian
Arabic U.A.E.
Arabic Bahrain
Arabic Algeria
Arabic Egypt
Arabic - Iraq
Arabic Jordan
Arabic Kuwait
Arabic Lebanon
Arabic Libya
Arabic Morocco
Arabic Oman
Arabic Qatar
Arabic Saudi
Arabia
Arabic -
Short
String
af
sq
Hex
Value
0x0436
0x041C
ar-ae
Decimal
Value
1078
1052
Locale
Description
Hindi
Hungarian
Short
String
hi
hu
Hex
Value
0x0439
0x040E
Decimal
Value
1081
1038
0x3801 14337
Icelandic
is
0x040F 1039
ar-bh
0x3C01 15361
Indonesian
in
0x0421 1057
ar-dz
0x1401 5121
it
0x0410 1040
ar-eg
0x0C01 3073
it-ch
0x0810 2064
ar-iq
0x0801 2049
Italian Standard
Italian Switzerland
Japanese
ja
0x0411 1041
ar-jo
0x2C01 11265
Korean
ko
0x0412 1042
ar-kw
0x3401 13313
Latvian
lv
0x0426 1062
ar-lb
0x3001 12289
Lithuanian
lt
0x0427 1063
ar-ly
0x1001 4097
Macedonian mk
0x042F 1071
ar-ma 0x1801 6145
Malay Malaysia
ms
0x043E 1086
ar-om 0x2001 8193
Maltese
mt
0x043A 1082
ar-qa
0x4001 16385
Norwegian no
Bokmål
0x0414 1044
ar-sa
0x0401 1025
Polish
pl
0x0415 1045
ar-sy
0x2801 10241
Portuguese - pt
0x0816 2070
Syria
Arabic Tunisia
Arabic Yemen
Basque
ar-tn
0x1C01 7169
ar-ye
0x2401 9217
eu
0x042D 1069
Belarusian
be
0x0423 1059
Bulgarian
bg
0x0402 1026
Catalan
ca
0x0403 1027
zh-cn
0x0804 2052
zh-hk
0x0C04 3076
zh-sg
Chinese PRC
Chinese Hong Kong
S.A.R.
Chinese Singapore
Chinese Taiwan
Croatian
Standard
Portuguese Brazil
RaetoRomance
Romanian
Romanian Moldova
Russian
Russian Moldova
Serbian Cyrillic
pt-br
0x0416 1046
rm
0x0417 1047
ro
0x0418 1048
ro-mo 0x0818 2072
ru
0x0419 1049
ru-mo 0x0819 2073
sr
0x0C1A 3098
Setsuana
tn
0x0432 1074
0x1004 4100
Slovenian
sl
0x0424 1060
zh-tw
0x0404 1028
Slovak
sk
0x041B 1051
hr
0x041A 1050
sb
0x042E 1070
Czech
cs
0x0405 1029
es
0x040A 1034
Danish
da
0x0406 1030
es-ar
0x2C0A 11274
Dutch
nl
0x0413 1043
es-bo
0x400A 16394
nl-be
0x0813 2067
Sorbian
Spanish Standard
Spanish Argentina
Spanish Bolivia
Spanish Chile
Spanish Columbia
Spanish Costa Rica
Spanish Dominican
Republic
Spanish Ecuador
Spanish Guatemala
es-cl
0x340A 13322
es-co
0x240A 9226
es-cr
0x140A 5130
es-do
0x1C0A 7178
es-ec
0x300A 12298
es-gt
0x100A 4106
es-hn
0x480A 18442
Dutch Belgium
English Australia
English Belize
English Canada
English Ireland
English Jamaica
English New
Zealand
English South Africa
English Trinidad
English United
Kingdom
English United
States
en-au 0x0C09 3081
en-bz
0x2809 10249
en-ca
0x1009 4105
en-ie
0x1809 6153
en-jm
0x2009 8201
en-nz
0x1409 5129
en-za
0x1C09 7177
en-tt
0x2C09 11273
Spanish Honduras
Spanish Mexico
Spanish Nicaragua
es-mx 0x080A 2058
es-ni
0x4C0A 19466
en-gb 0x0809 2057
Spanish Panama
es-pa
0x180A 6154
en-us
0x0409 1033
Spanish Peru
es-pe
0x280A 10250
Estonian
et
0x0425 1061
es-pr
0x500A 20490
Farsi
fa
0x0429 1065
es-py
0x3C0A 15370
Spanish Puerto Rico
Spanish -
Paraguay
Spanish - El
es-sv
Salvador
Spanish es-uy
Uruguay
Spanish es-ve
Venezuela
Finnish
fi
0x040B 1035
Faeroese
fo
0x0438 1080
fr
0x040C 1036
fr-be
0x080C 2060
Sutu
sx
0x0430 1072
fr-ca
0x0C0C 3084
Swedish
sv
0x041D 1053
fr-lu
0x140C 5132
Swedish Finland
sv-fi
0x081D 2077
fr-ch
0x100C 4108
Thai
th
0x041E 1054
gd
0x043C 1084
Turkish
tr
0x041F 1055
de
0x0407 1031
Tsonga
ts
0x0431 1073
de-at
0x0C07 3079
Ukranian
uk
0x0422 1058
de-li
0x1407 5127
Urdu Pakistan
ur
0x0420 1056
de-lu
0x1007 4103
Vietnamese
vi
0x042A 1066
de-ch
0x0807 2055
Xhosa
xh
0x0434 1076
el
he
0x0408 1032
0x040D 1037
Yiddish
Zulu
ji
zu
0x043D 1085
0x0435 1077
French Standard
French Belgium
French Canada
French Luxembour
g
French Switzerland
Gaelic Scotland
German Standard
German Austrian
German Lichtenstein
German Luxembour
g
German Switzerland
Greek
Hebrew
0x440A 17418
0x380A 14346
0x200A 8202
Timeout di una pagina ASP
Per impostare la durata massima di esecuzione di una pagina asp si puo modificare la proprietà
ScriptTimeout dell'oggetto Server; il suo valore di default è di 90 secondi.
Nell'esempio seguente, tale proprietà viene impostata a 2 minuti; in questo caso, quando una pagina non
viene eseguita entro 120 secondi, va in timeout.
<%
Server.ScriptTimeout = 120
%>
E' bene prestare attenzione al valore di timeout che si imposta, in quanto pagine contenenti elaborazioni
piuttosto pesanti possono necessitare di un tempo relativamente alto per essere eseguite.
Dimensione di un Array
La funzione UBound di VBScript restituisce l'indice piu elevato per la dimensione dell'array che viene
indicata. Viene utilizzata per conoscere la dimensione di un array.
La sintassi è la seguente:
UBound (array, dimensione)
array è il nome dell'array, dimensione indica la dimensione di cui si vuole conoscere l'indice massimo: 1 è
la prima dimensione, 2 la seconda, e cosi via...
Ecco un esempio che ne illustra il funzionamento:
<%
Dim myArray(6, 2, 9, 3) 'array a 4 dimensioni
UBound(myArray, 1) 'restituisce 6
UBound(myArray, 3) 'restituisce 9
%>
Gestione degli Errori
Il seguente script mostra come è possibile visualizzare il numero e il tipo di errore che eventualmente si
verifica nell'esecuzione di una pagina ASP.
Innanzitutto si inizializza la gestione degli errori con la riga: On Error Resume Next. A questo punto, si
cerca la porzione di codice in cui si presume si trovi l'errore e si visualizzano le proprietà Number e
Description dell'oggetto Err.
Nell'esempio di questo script viene provocato un errore in quanto si cerca di effettuare una divisione per
0:
<%
On Error Resume Next
Response.Write (6/0)
Response.Write ("Errore "&Err.Number&" - "&Err.Description)
%>
Eseguendo questo script dovreste ottenere il seguente ouput:
Errore 11 - Divisione per zero
Visualizzare la collezione ServerVariables
La collezione ServerVariables dell'oggetto Request contiene importanti ed utili informazioni riguardanti il
server e il client che sta navigando sul server stesso. Con queste poche righe di codice è possibile
visualizzare sul browser la lista completa di queste variabili e il loro valore al momento dell'esecuzione
dello script:
<%
dim item
for each item in Request.ServerVariables
Response.Write(item & "= "&Request.ServerVariables(item) & "<br>")
next
%>
Convertitore Lire/Euro
Sempre più spesso abbiamo la necessità di convertire un valore in lire in Euro, ecco una funzione che ci
permette di ottenere questa conversione:
<%
Function LireInEuro(ByVal lire)
Const Euro = 1936.27
Dim e
e = FormatCurrency((lire/Euro), 2)
LireInEuro = e 'restituisce il valore in euro
End Function
%>
La funzione riceve il valore in lire e restituisce il corrispondente in euro lasciando due decimali dopo la
virgola; da ricordare che se il valore da convertire è preso da un form questo deve prima essere
convertito in un intero (in VBScript ciò può essere fatto tramite la funzione CInt).
Inviare e-mail con allegati
Il seguente script illustra come è possibile allegare un file ad una email inviata tramite CDONTS; in
questo esempio alleghiamo il file chiamato prova.txt, che supponiamo si trovi nella root principale del
nostro sito.
<%
Set myMail = Server.CreateObject("CDONTS.NewMail")
'specifichiamo il nome del file da allegare
myMail.AttachFile(Server.MapPath("\prova.txt"))
'inviamo l'e-mail
myMail.Send "[email protected]", "[email protected]", "Mail con Allegato",
"Prova di invio e-mail con allegato", 1
Set myMail = nothing
%>
Come gestire il ritorno a capo
Quando usiamo un input di tipo text multilinea ci può interessare riconoscere quando l'utente inserisce
dei ritorno a capo e sostituirli con un <br> per poi stampare il contenuto dell'input in una pagina html.
Ecco la soluzione in VBScript:
<%
Dim Testo
Testo = Request.QueryString("miotesto") 'Riceviamo il testo
Testo = Replace(Testo, VbCrLf, "<br>") 'Sostituiamo i ritorni a capo
%>
VbCrLf è una costante VBScript che indica appunto il carattere di fine riga e ritorno a capo.
Visualizzare il contenuto di una directory
Per stampare il contenuto di una directory ci serviamo dell''oggetto FileSystemObject; nella variabile
nomedir andrà specificato il nome della directory scelta. Ecco il codice:
<%
Set fs = Server.CreateObject ( "Scripting.FileSystemObject" )
Set dir = fs.GetFolder( nomedir )
For Each File In dir.Files
Response.Write( File.Name )&"<BR>"
Next
%>
Sostituire gli apici nelle stringhe
Quando si inseriscono stringhe in una database può capitare che queste contengano degli apici; questi
apici possono provocare errori quando il nostro codice SQL viene eseguito. Ecco come risolvere il
problema:
<%
Testo = Replace ( Testo, "'", "''" )
%>
La variabile Testo conterrà il nostro testo da utilizzare e tramite la funzione Replace sostituiremo
all'interno della stringa il carattere ' con un doppio apice('') in modo che la stringa SQL lo interpreti come
un apice singolo.
Attenzione: quando si parla di doppio apice non si intendono le virgolette (") ma bensì 2 volte il
carattere apice (').
Ottenere l'IP del Visitatore
Nel caso in cui si vogliano realizzare dei report e delle statistiche riguardanti le visite a un sito web, può
essere molto utile conoscere l'indirizzo IP dell'utente che sta visitando il sito stesso. Tale informazione è
contenuta nella collezione ServerVariables dell'oggetto Request; il nome della variabile in questione è
REMOTE_ADDR.
Vediamo il codice che permette di visualizzare sul browser il proprio indirizzo IP:
<%
Dim ip
ip = Request.ServerVariables("REMOTE_ADDR")
Response.write "Il tuo indirizzo IP è: " &ip
%>
Conoscere il percorso di un file sul server
In certi casi può essere necessario sapere il percorso completo di un file che si trova nel server, questo
è possibile tramite il metodo MapPath dell'oggetto Server:
<%
Dim Percorso
Percorso = Server.MapPath("prova.txt")
Response.Write ("Il percorso del file prova.txt è :"&Percorso)
%>
Questo breve script ricerca il file prova.txt e ne visualizza il percorso sulla pagina del browser.
Collegarsi ad Access con Password
Ecco come creare una connessione ADO ad un database Access in cui è stata impostata una
password:
<%
Dim Conn
Set Conn=Server.CreateObject("ADODB.Connection")
Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq="&_
server.MapPath("database.mdb")&";PWD=password"
%>
Al posto di password ovviamente andrà sostituita la password del database.
Connessione ad un DataBase Access
Quando si lavora con un database Access il primo passaggio da effettuare è la connessione con la
sorgente di dati (il database stesso). Per realizzare la connessione si utilizza l'oggetto ADO
Connection; dopo la connessione ad una fonte di dati tramite il metodo Open, l'oggetto agisce da
interfaccia con la fonte di dati.
Vediamo il codice necessario ad aprire la connessione con un database Access:
<%
Dim cn
Set cn = Server.CreateObject("ADODB.Connection")
cn.Open "driver={Microsoft Access Driver(*.mdb)};dbq="&_
Server.MapPath("databasename.mdb")
%>
dove databasename sarà il nome del database che vogliamo aprire.
Generare Numeri Casuali
A volte, in una pagina internet, si può avere la necessità di generare numeri casuali; per ottenere ciò è
possibile utilizzare la funzione di VBScript Rnd().
Il semplice utilizzo di questa funzione non produce numeri "realmente casuali", in quanto genera sempre
la stessa sequenza di numeri. Per ovviare a ciò, prima di utilizzare la funzione Rnd(), è necessario
inizializzare il generatore di numeri casuali tramite l'istruzione Randomize(), che sfrutta il timer del
sistema per generare una sequenza di numeri random.
Vediamo quindi il codice che permette di visualizzare una serie di 10 numeri casuali:
<%
Randomize
Dim i
for i=0 to 9
Response.Write(Rnd()&"<br>")
next
%>
Visualizzare la Data e l'Ora attuali
Spesso capita di vedere in una pagina web, la data e l'ora attuale. Per poter visualizzare la data tramite
uno script asp possiamo utilizzare la funzione di VBScript Date() che restituisce la data corrente del
server nel determinato istante in cui la pagina viene inviata al browser; l'analoga funzione che restituisce
l'orario è Time().
Se intendiamo visualizzare sia data che orario possiamo utilizzare la funzione Now() che equivale alla
concatenazione dei risultati delle funzioni Date e Time.
Ecco il codice di esempio:
<%
Response.Write ("Oggi è il: " &Date())
Response.Write ("<%br>%")
Response.Write ("Sono le ore: " &Time())
%>
Reindirizzare il Browser
Per reindirizzare il browser ad una determinata pagina è possibile sfruttare il metodo Redirect
dell'oggetto Response. Il reindirizzamento dovrà essere effettuato prima che venga inviata qualsiasi riga
di HTML al browser dell'utente altrimenti si verificherà un errore. Vediamo ora lo script che consente il
reindirizzamento:
<%
'Reindirizziamo alla pagina prova.asp
Response.Redirect("/prova.asp")
%>
Anche se può sembrare molto utile è meglio non abusare di questo metodo in quanto costringe il server a
caricare due pagine; inoltre il metodo Redirect non è supportato da alcuni browser.
Rinominare un file con FileSystemObject
FileSystemObject è un oggetto utilizzato per fornire accesso al fyle sistem del computer. Una
caratteristica di questo oggetto è la mancanza di un metodo diretto che consenta di rinominare i file. Per
ovviare a tale "mancanza" è possibile sfruttare la proprietà MoveFile nel modo seguente:
<%
Dim fs
Set fs = Server.CreateObject("Scripting.FileSystemObject")
fs.MoveFile "c:\nomefile.asp", "c:\nomefile_rinominato.asp"
Set fs = nothing
%>
Realizzare una Copia di backup di una tabella
Può capitare a volte di voler effettuare una copia di backup di una determinata tabella del nostro
database; per fare ciò è possibile utilizzare una stringa sql che inserisca tutti i valori della tabella che
vogliamo "duplicare" in una nuova tabella. In questo modo otterremo una copia, sia della struttura che dei
dati, della tabella di partenza. Ecco il codice dello script:
<%
'Creiamo la connessione al database
Dim cn
Set cn = Server.CreateObject("ADODB.Connection")
cn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" &_
Server.MapPath("mio_database.mdb")
'Componiamo la stringa SQL e la eseguiamo
Dim sql
sql = "INSERT INTO Tabella_Copia SELECT * FROM Tabella_Source"
cn.Execute(sql)
Set cn = nothing
%>
Rilevare l'URL della pagina di provenienza
Per rilevare l'indirizzo della pagina da cui proviene un utente è possibile sfruttare la variabile d'ambiente
HTTP_REFERER della collezione ServerVariables dell'oggetto Request. Vediamo un esempio di codice:
<%
Dim fromURL
fromURL = Request.ServerVariables("HTTP_REFERER")
Response.Write "La pagina di provenienza è: " &fromURL& "."
%>
Ottenere l'URL completo della pagina attuale
Spesso si ha la necessità di conoscere l'indirizzo completo della pagina che sta eseguendo il nostro script
ASP; per fare ciò è possibile sfruttare e concatenare fra loro alcuni elementi della collezzione Server
Variables. Vediamo il codice ASP necessario:
<%
Dim sito
sito = Request.ServerVariables("HTTP_HOST")
Dim pagina
pagina = Request.ServerVariables("SCRIPT_NAME")
Dim querystring
querystring = Request.QueryString
Dim url
url = "http://" & sito
url = url & pagina
if len(querystring) > 0 then
url = url & "?" & querystring
end if
Response.write "L'indirizzo completo di questa pagina è: " &url & "."
%>