Recommandé: collection utile de fonctions dans le développement ASP (1) Une collection de fonctions utiles dans le développement ASP est très utile! J'espère que tout le monde le garde! % '********************************************************' Empêchez la soumission externe '************************************* FONCTION CHKPOST () DIM Server_v1, server_v2 chkpost = false server_v1 = cStr (request.severvari
Dans VBScript, il y a une instruction NEXT CV ERROR REPOS qui oblige l'interprète de script à ignorer les erreurs d'exécution et à continuer l'exécution du code de script. Ensuite, le script peut vérifier la valeur de la propriété Err.Number pour déterminer si une erreur s'est produite. Si une erreur se produit, une valeur non nulle est renvoyée. Dans ASP 3.0, vous pouvez également utiliser sur l'erreur Goto 0 pour revenir à la gestion des erreurs par défaut. Ce type de traitement est effectivement effectué dans ASP 2.0, mais il n'y a pas de description de document correspondante, qui est courante dans de nombreux fichiers de traitement liés aux données ASP. Ajoutez une erreur sur l'erreur Suivant pour désactiver le traitement par défaut d'erreur, puis utilisez ERR pour l'attraper.Si err alors
err.Clear
Une erreur s'est produite dans Response.Write!
Réponse.
Terminer si
Afin d'obtenir une description d'erreur plus détaillée, essayons l'objet Asperror. C'est un nouvel objet d'Asp3.0. Il peut être obtenu via la méthode Getlasterror de l'objet serveur . Asperror fournit des informations détaillées sur la dernière erreur dans ASP. Contrairement à l'objet ERR dans VBScript, cette méthode ne peut pas être appelée à tout moment pour voir si une erreur se produit. Il ne peut être utilisé que dans une page Web d'erreur personnalisée ASP. Si vous l'utilisez en désactivant la gestion des erreurs par défaut (en utilisant l'instruction SUIVANT RESSUM ERROR), comme en utilisant l'objet ERR, la méthode GetlasterRor ne peut pas accéder aux données détaillées de l'erreur.
Propriétés de l'objet Asperror:
L'objet Asperror fournit neuf attributs pour indiquer la nature et la source de l'erreur qui s'est produite et renvoie le code réel qui a provoqué l'erreur. Les propriétés et les descriptions sont les suivantes:
Aspcode: entier. Numéro d'erreur généré par ASP / IIS, comme 0x800A009
AspDescription: type de chaîne. Si cette erreur est une erreur liée à l'ASP, cette propriété est une description détaillée de l'erreur. Par exemple: tous http: http_accept: * / * http_accept_language: zh-cn http_connection: keep-alive http_host: s http_user_agent: MOZILLA / 4.0 (compatible; msie 6.0; windows nt 5.0; (r1 1.5)) ... et rapporte;
Catégorie: type de chaîne. La source de l'erreur est celle de la langue de script interne ASP, ou un objet.
Colonne: entier. Emplacement du caractère dans le fichier qui a généré l'erreur
Description: Type de chaîne. Une brève description de l'erreur
Fichier: type de chaîne. Le nom du fichier est traité lorsque l'erreur s'est produite
Ligne: entier. Numéro de ligne dans le fichier qui a généré l'erreur
Numéro: entier. Un code d'erreur COM standard
Source: Type de chaîne. Le code réel de la ligne qui a soulevé l'erreur
OK, ce sont 9 propriétés. La syntaxe de l'utilisation de l'objet asperror est:
asperror.property
C'est tout: asperror.aspcode ()
Asperror.aspDescription ()
Asperror.category ()
Asperror.column ()
Asperror.description ()
Asperror.file ()
Asperror.line ()
Asperror.number ()
Asperror.source ()
Lorsqu'une erreur liée à l'ASP se produit sur n'importe quelle page sous tous les répertoires pris en charge par IIS (ou dans le répertoire où les propriétés de mappage d'erreur sont modifiées), la page d'erreur personnalisée sera chargée. En fait, un piège d'erreur de script normal a été défini maintenant, car l'erreur d'exécution ASP sur n'importe quelle page Web de ce répertoire déclenchera une page d'erreur personnalisée. La page Web d'erreur est la partie d'installation par défaut de l'IIS et peut être personnalisée en fonction des situations personnelles. Par exemple, lorsque nous entrons une page Web inexistante dans un répertoire, une erreur 404 se produit. Lorsqu'une erreur 404 se produit, la page utilisée est 404b.htm. Ce fichier contient une pièce de code de script client, qui obtient l'URL du document actuel (récupérer à partir de l'attribut URL de l'objet document) et l'affiche dans la page: [html] <! Doctype html public - // w3c // dtd html 3.2 final // en>
<html dir = ltr>
<adal>
<style> a: link {font: 9pt / 11pt 环; Couleur: FF0000} A: Visité {Font: 9pt / 11pt 环; Couleur: # 4E4E4E}
</ style>
<Meta name = robots contenu = noindex>
<Titre> Impossible de trouver la page Web </TITAL>
<Meta http-equiv = contenu contenu de type = text-html; charse = gb2312>
<Méta name = MS.Locale Content = Zh-Cn>
</ head>
<cript>
Fonction Home Page () {
<! -
// Dans de vrais bits, les URL sont renvoyées à notre script comme ceci:
// res: //shdocvw.dll/http_404.htm#http: //www.docurl.com/bar.htm
// Pour tester, utilisez docurl = res: //shdocvw.dll/http_404.htm#https: //www.microsoft.com/bar.htm
Docurl = document.url;
// C'est là que le HTTP ou HTTPS se trouvera, comme le trouvera: // mais sauter le res: //
protocolinIndex = docurl.indexof (: //, 4);
// Cela trouve la fin de la fin du serveur de domaine
serverIndex = docurl.Indexof (/, protocolinIndex + 3);
// Pour le HREF, nous avons besoin d'une URL valide dans le domaine. Nous recherchons le symbole # pour trouver le début
// de l'URL vraie et ajoutez 1 pour le sauter - c'est la valeur débutante. Nous utilisons ServerIndex comme marqueur final.
//UrlResult=Docurl.Substring(protocoLindex - 4, ServerIndex);
BeginUrl = docurl.indexof (#, 1) + 1;
urlResult = docurl.substring (BeginUrl, serverIndex);
// Pour l'affichage, nous devons sauter après http: //, et aller à la prochaine barre
DisplayResult = Docurl.SubString (ProtoColIndex + 3, ServerIndex);
InserteMelementAchor (UrlResult, DisplayResult);
}
fonction htmlencocode (texte)
{
return text.replace (/ & / g, '& amp'). remplacer (/ '/ g,' & quot; '). remplacer (/ </ g,' & lt; '). Remplace (// g,' & gt; ');
}
fonction tagattrib (nom, valeur)
{
return '' + name + '=' + htmlencode (valeur) + '';
}
fonction printtag (tagName, NeedCloseTag, Attrib, Inner) {
document.write ('<' + tagname + attrib + '>' + htmLencode (inner));
if (NeedCloseTag) document.write ('</' + tagname + '>');
}
fonction uri (href)
{
Iever = window.navigator.appversion;
Iever = iever.substr (iever.indexof ('msie') + 5, 3);
return (iever.charat (1) == '.' && iever> = '5.5')?
Encodéuri (HREF):
Escape (href) .replace (/% 3a / g, ':'). Remplacer (/% 3b / g, ';');
}
fonction insertElementAchor (HREF, texte)
{
Printtag ('a', true, tagattrib ('href', uri (href)), texte);
}
// ->
</cript>
<corps bgcolor = ffffff>
<table largeur = 410 cellpadding = 3 cellules = 5>
<tr>
<TD Align = Left Valign = Middle Width = 360>
<H1 Style = Couleur: 000000; FONT: 12pt / 15pt Songti> <! - Problème -> La page Web ne peut être trouvée </h1>
</td>
</tr>
<tr>
<td width = 400 COLSPAN = 2> <Font Style = Color: 000000; FONT: 9pt / 11pt> La page Web que vous recherchez peut avoir été supprimée, renommée ou est temporairement indisponible. </font> </td>
</tr>
<tr>
<td width = 400 COLSPAN = 2> <Font Style = Color: 000000; FONT: 9pt / 11pt Song Font>
<hr color = # c0c0c0 noshade>
<p> Veuillez essayer ce qui suit: </p>
<ul>
<li> Si vous avez tapé une adresse Web dans la barre d'adresse, vérifiez qu'elle est correctement orthographiée. <br>
</li>
<li> Ouvrir <Script>
<! -
if (! ((window.navigator.useragent.indexof (msie)> 0) && (window.navigator.appversion.charat (0) == 2))))
{
Page d'accueil ();
}
// ->
</cript> Page d'accueil, trouvez des liens vers les informations requises. </li>
<li> Cliquez sur le bouton <a href = javaScript: History.back (1)> Back </a> pour essayer d'autres liens. </li>
</ul>
<H2 Style = Font: 9pt / 11pt Songti; Couleur: 000000> HTTP 404 - Le fichier ne peut être trouvé <br> Internet Information Service <br> </h2>
<hr color = # c0c0c0 noshade>
<p> Informations techniques (support des individus) </p>
<ul>
<li> Détails: <br> <a href = http: //www.microsoft.com/contentRedirect.asp? Prd = iis & sbp = & pver = 5.0 & pid = & id = 404 & cat = web & os = & over = & hrd = & opt1 = & opt2 = & opt3 = target = _blank> microosoft
</li>
</ul>
</font> </td>
</tr>
</ table>
</docy>
</html>
[/ html]
Lorsqu'une erreur se produit, la relation de mappage entre l'erreur et le fichier de page Web d'erreur est déterminée dans l'onglet Erreurs personnalisés de la boîte de dialogue Propriétés de chaque répertoire. Ceci est dans les paramètres de la propriété dans Internet Services Manager. Si vous êtes intéressé, allez jeter un œil.
Erreur personnalisée La page Web affiche toutes les valeurs de l'attribut d'objet Asperror et renvoie un message d'état d'en-tête HTTP au client à l'aide de la méthode réponse.status, indiquant qu'une erreur s'est produite. Utilisez ensuite la méthode Getlasterror pour obtenir une référence à l'objet Asperror, afin que vous puissiez accéder aux données détaillées de l'erreur:
…
<%
Response.status = 500 Erreur du serveur interne
Définir objaspeerror = server.getLasterRor ()
%>
Exécutant actuellement la page: <b> show_error.asp </b> <p>
<b> Détails d'erreur: </b> <br>
Asperror.aspcode = <% = objaspeerror.aspcode%> <br>
Asperror.number = <% = objaspeerror.number%> (0x <% = hex (objaspeerror.number)%>) <br>
Asperror.source = <% = server.htmlencode (objasperror.source)%> <br>
Asperror.category = <% = objaspeerror.category%> <br>
Asperror.file = <% = objaspeerror.file%> <br>
Asperror.line = <% = objaspeerror.line%> <br>
Asperror.column = <% = objaspeerror.column%> <br>
Asperror.Description = <% = ObjaspeError.Description%> <br>
Asperror.aspds = <% = objaspeerror.aspds%>
<Form Action = <% = request.servervariables (http_referer)%> méthode = post>
<Entrée type = soumettre name = cmdok value = retour à la page précédente>
<p>
</ form> Si une erreur de script ou ASP se produit dans une page d'erreur personnalisée, IIS renvoie uniquement un message général correspondant au code d'erreur 500: 100. Cela pourrait être un message d'erreur du moteur de script lui-même, ou tout simplement un message assez simple: erreur de serveur interne. La page d'erreur personnalisée ne sera plus rechargée.
Tous les environnements contenant la mauvaise page Web seront livrés à la mauvaise page Web personnalisée. Autrement dit, les valeurs stockées dans n'importe quelle collection ou attribut d'objets internes ASP peuvent être utilisés. Par exemple, si vous récupérez la valeur http_referer à partir de la collection request.servervariables, elle reflétera l'URL de la page qui appelait la page d'origine (c'est-à-dire la page qui était avant l'erreur). Cette valeur ne change pas lorsque le serveur transfère l'exécution vers la mauvaise page Web, et elle ne contiendra pas l'URL de la page Web qui s'exécutait lorsque l'erreur s'est produite.
De même, la valeur script_name sera le nom de la page contenant l'erreur, et non l'URL de la page. Lorsqu'une page d'erreur a été chargée, vous pouvez le confirmer en vérifiant l'URL dans la barre d'adresse du navigateur. Cependant, les valeurs stockées dans les variables de script de la page Web d'origine ne sont pas disponibles dans la page Web erronée personnalisée.
Si la page Web ASP d'origine s'exécute dans une transaction, c'est-à-dire une directive <% @ transaction =…%> à l'avant de la page Web, vous devez également déterminer si certaines méthodes doivent être prises dans la page Web pour quitter la transaction. Par exemple, vous pouvez appeler la méthode SetAbort avec l'objet objectConText intégré:
objectContext.setabort
Eh bien, le temps frontal a envoyé des milliers d'e-mails de spam, qui sont tous manqués par erreur
Option explicite
Response.Addheader Status Code, 200
Réponse.
Sur l'erreur reprendre ensuite
Réponse.
Objerreur faible
Définir objerror = server.getLasterRor ()
Dim Objerr, Objmail, HTML
Définir objerr = server.getLasterRor ()
Set objmail = createObject (CDONTS.NEWMAIL)
objmail.from = [email protected]
objmail.to = [email protected]
objmail.bodyformat = 0
objmail.mailformat = 0
Objmail.Subject = Erreur QOP 500
html = <font face = 'Verdana, Arial, Helvetica, Sans-Serif'> <br>
HTML = HTML & <p> Erreur s'est produite à: et maintenant
html = html & <p> référé de: & request.servervariables (http_referrer)
html = html & <p> url: & request.servervariables (URL)
html = html & <p> <b> catégorie: </b> </p> & objerr.category
html = html & <p> <b> nom de fichier: </b> </p> & objerr.file
html = html & <p> <b> code ASP: </b> </p> & objerr.aspcode
html = html & <p> <b> numéro: </b> </p> & objerr.number
html = html & <p> <b> source: </b> </p> & objerr.source
html = html & <p> <b> LineNumber: </b> </p> & objerr.line
html = html & <p> <b> colonne: </b> </p> & Objerr.Column
html = html & <p> <b> Description: </b> </p> & Objerr.Description
html = html & <p> <b> ASP Description: </b> </p> & objerr.aspdescription
html = html & <lockquote>
html = html & all http: & request.servervariables (all_http)
html = html & </lockquote> </font>
objmail.body = html
objmail.send
objerr.clear
Définir objmail = rien
Définir Objerr = rien
Response.Write (HTML)
C'est vraiment ennuyeux pour fonctionner. Regardez ce que M. Lao Gai a écrit en 500-100.asp:
<%
Response.Write objasperror.category
Si objaspeerror.aspcode> alors réponse.write, & objaspeerror.aspcode
Réponse.write (0x & hex (objasperror.number) &) & <br>
Réponse.write <b> & objasperror.description & </b> <br>
Si objaspeerror.aspds> alors réponse.write objaspeerror.aspds & <br>
blnerrorwritten = false
'Affichez la source seulement si elle est disponible et la demande est de la même machine que IIS
Si objaspeerror.source> alors
strServerName = lCase (request.servervariables (server_name))
strServerip = request.servervariables (local_addr)
strReMoteip = request.servervariables (Remote_addr)
If (strServerName = localhost ou strSerVerip = strrremoteip) et objasperror.file <>? Alors
Réponse.write objasperror.file
Si objasperror.line> 0 alors réponse.write, line & objasperror.line
Si objaspeerror.column> 0 alors réponse.write, colonne et objaspeerror.column
Réponse.WRITE <br>
Response.Write <Font Style = Couleur: 000000; FONT: 8PT / 11PT COURIER NOUVEAU> <B>
Réponse.write server.htmlencode (objasperror.source) & <br>
Si objaspeerror.column> 0 alors réponse.Write String ((objaspeerror.column - 1), -) & ^ <br>
Réponse.write </b> </font>
blnerrorwritten = true
Terminer si
Terminer si
Sinon Blnerrorwritten et objasperror.file <>? Alors
Réponse.write <b> & objasperror.file
Si objasperror.line> 0 alors réponse.write, line & objasperror.line
Si objaspeerror.column> 0 alors réponse.write, colonne et objaspeerror.column
Response.Write </b> <br>
Terminer si
%>
Voici une référence: programmation avancée ASP 3.0 concernant les propriétés de l'utilisation d'objets Asperror, il y a les points suivants à noter:
· Même si aucune erreur ne se produit, la propriété numérique doit toujours avoir une valeur. Si aucune erreur ne se produit lorsque la page Web ASP appelle la méthode Getlasterror, la valeur de cette propriété est 0. Normalement, pour l'erreur d'exécution des scripts ASP, la propriété numéro renvoie la valeur hexadécimale 0x800A0000, plus le code d'erreur du moteur de script standard. Par exemple, l'exemple précédent renvoie une valeur de 0x800a0009 pour l'erreur de portée de l'indice, car le code d'erreur pour VBScript pour cette erreur de type est 9.
· Lorsqu'une erreur s'est écoulée, les attributs de catégorie et de description auront toujours une valeur.
· La valeur de la propriété APScode est générée par IIS et sera vide pour la plupart des erreurs de script. Dans plus de cas, il existe des valeurs correspondantes lorsqu'un composant externe est utilisé.
La valeur de la propriété ASPDescription est générée par le préprocesseur ASP, et non par le moteur de script actuellement utilisé, et sera vide pour la plupart des erreurs de script. Plus souvent, il existe une valeur correspondante pour des erreurs telles que l'appel d'une méthode non valide sur un objet intégré ASP.
· Les propriétés du fichier, de la source, de la ligne et de la colonne ne peuvent être définies que lorsqu'une erreur se produit et si les données détaillées d'erreur sont disponibles. Pour une erreur d'exécution, les propriétés du fichier et de la ligne sont généralement valides, mais la propriété de colonne renvoie souvent -1. La propriété source est renvoyée lorsque l'erreur est une erreur de syntaxe qui empêche la page d'être traitée par ASP. Généralement, dans ces cas, les propriétés de ligne et de colonne sont valides. Si vous écrivez la valeur de la propriété source sur la page, il est sage de passer la valeur à HTMLencode d'abord, au cas où il contient des caractères HTML illégaux. La méthode HTMLencode sera discutée en détail plus loin dans ce chapitre.
Erreur d'objet
Conseils: c'est la deuxième fois que je écrit ceci, nnd. L'accent initial était sur l'introduction de l'objet Asperror. Je vais maintenant présenter l'objet ERR. Il s'agit d'un objet très simple et facile à opérer. Allons., Dans la page ASP.
Lorsque vous utilisez un objet ERR, vous n'avez pas besoin de créer une instance, ce qui signifie que vous pouvez l'utiliser avec désinvolture lorsque vous souhaitez l'utiliser. Tout comme la session, vous n'avez pas besoin de créer une instance comme lors de l'utilisation d'un objet ADODB. Set Conn = server.createObject (adodb.connection) est utilisé pour créer une instance. Il renvoie un code d'erreur, mais err! = Err.number peut être effacé avec la méthode claire pour faciliter la prochaine utilisation. Sa méthode principale est une méthode de description, qui renvoie une brève description d'erreur. Voici un exemple très classique:
<% @ Language = vbscript%>
<% Réponse.buffer = true
Sur l'erreur reprendre ensuite
%>
<%
S = SA
réponse.Write (int (s))
Si err.number <> 0 alors
Réponse.
Une erreur s'est produite dans la réponse. Écriture:%>
<html>
<adal>
<Title> </Title>
</ Head>
<body>
Numéro d'erreur: <% = err.number%> <br/>
Message d'erreur: <% = err.description%> <br/>
Fichier d'erreur: <% = err.source%> <br/>
Ligne d'erreur: <% = err.line%> <br/>
<% = Err%>
</docy>
</html>
<% Fin si%>
Exécutez-le et voyez, err.line est vide, pourquoi? Étant donné que la méthode de ligne écrite dans VB d'ASP n'est pas prise en charge, il s'agit d'un déchet dans le support de VB.jscript, et vous devez étudier pour attraper.
Il convient de noter que lors de l'utilisation de l'objet ERR, le CV d'erreur Suivant doit être ajouté et que l'exception qui a passé l'objet Asperror est lancée.
Lors de la liaison d'une base de données, vous pouvez utiliser la propriété d'objet d'erreur: Compte: Utilisé pour compter le nombre de collections d'erreurs, méthode d'élément: utilisé pour spécifier une erreur spécifique, la syntaxe est error.item (numéro), où le nombre est un nombre. Étant donné que l'élément est la méthode par défaut, la méthode d'écriture d'erreur (numéro) est équivalente à la précédente. Vous trouverez ci-dessous un programme. Utilisé pour énumérer les objets d'erreur:
<%
Sur l'erreur reprendre ensuite
Définir Conn = Server.CreateObject (ADODB.Connection)
Dim i, your_databasepath: your_databasepath = n ° mdb
Connstr = fournisseur = Microsoft.Jet.oledb.4.0; Data Source = & Server.Mappath (Your_DatabasePath) &
Conn.Open Connstr
Si Conn.Errors.Count <> 0 alors
Response.Write n'a pas lié la base de données <hr />
pour i = 0 à conn.errors.count-1
Response.Write Conn.Errors.item (i) & <hr>
Response.write err.description
suivant
autre
Base de données de liaison de réponse.
terminer si
Conn.Close
%>
Il n'y a pas de différence entre l'objet ERR, avez-vous vu le résultat de comparaison? Il fait si froid qu'il est facile d'utiliser directement l'objet ERR.
Il est généralement recommandé d'utiliser l'objet Asperror pendant le débogage, ce qui signifie que si l'erreur on reprend la ligne suivante est REM, il sera lancé par défaut avec Asperror. Pendant l'exploitation officielle, vous pouvez utiliser l'objet ERR pour faire quelque chose à moins d'avoir des exigences spéciales.
Partager: collection utile de fonctions dans le développement ASP (2) Une collection de fonctions utiles dans le développement ASP est très utile, veuillez le garder! '******************************************' Filtrage Hyperlien '********************************* Fonction vérification (Byval Chkstr) Dim Str: Str = chktr Str = Trim (str) If isNull (str)