OBLog

Bienvenue dans OBLog,  Visiteur

Lire les blogs auxquels vous êtes abonné(e) :

Excel     titres     4 messages
HTML pour débutants     titres     14 messages
Linux     titres     2 messages
Mode d'emploi de OBLog     titres     4 messages
Programmation en ASP     titres     15 messages

  • Si vous êtes membre de la communauté EPFL, vous pouvez contribuer à ces blogs en vous authentifiant
  • Les membres de l'IBETON peuvent créer leurs propres blogs et y inviter des membres de l'EPFL.

Contenu du blog Programmation en ASP


1. Références pour la programmation en ASP  (OB 06.01.05, 12:43) 
O
  
  1. Le site que je consulte toujours en premier (et souvent le seul) : www.devguru.com. Toutes l'information utile ne se trouve pas dans la rubrique ASP. La rubrique ADO donne les informations pour se connecter aux bases de données alors que la rubrique vbscript donne les informations pour les généralités du langage.
  2. Un site un peu plus fouillé, et qui part dans plusieurs directions, mais avec de bonnes informations tout de même : http://www.asp-php.net/
  3. Je viens seulement de repérer ASP 101, mais il a l'air intéressant avec des morceaux de scripts bien écrits

2. ASP, Perl, PHP, JSP ?  (OB 06.01.05, 18:15) 
O
   Rédaction en cours
L'ASP (Active Server Pages) est une technologie Microsoft, assez ancienne, pour créer des pages web à contenu dynamique. Elle a été en partie supplantée par ASPX (ou ASP.NET), qui est plus puissant mais moins facile d'accès.
Avant d'utiliser ASP je programmais des pages web à contenu dynamique en Perl, un langage très puissant et très ecclectique mais qui m'obligeait à écrire l'intégralité des pages dans ce langage de programmation, alors même que ce que je désirais n'était peut-être que d'indiquer la date de dernière mise à jour d'un fichier sinon essentiellement statique. L'avantage de l'ASP, et des langages qui l'ont suivi, comme les nouvelles versions de Perl, ou PHP, ou encore le JSP de Sun, c'est de permettre de n'écrire dans un langage de programmation que la partie dynamique de chaque page, en laissant la partie statique en simple HTML, plus facile à créer et à modifier.
C'est ainsi que la grande majorité des pages du site IBETON ont un contenu statique, rédigé en utilisant un éditeur HTML simple comme FrontPage, alors que le code ASP est responsable de créer la mise en page (colonnes multiples, charte graphique, mise en page pour impression) et les fonctionnalités avancées (date de mise à jour, coordonnées de l'auteur, tracking, etc.)

3. Langages de programmation  (OB 06.09.05, 10:00) 
O
   Il y a deux langages de programmation possibles pour ASP : VB Script et JScript. Je ne connais et n'utilise que VB Script. En fait, ce n'est pas un Basic très visuel, car il n'est pas doté d'un environnement de développement ( il y a des solutions à cela), mais il partage la même syntaxe que ce langage de Microsoft. Voici la réféfence des fonctionnalités disponibles dans cet environnement. Sans être complètement orienté-objet comme vb.net, c'est un langage puissant qui permet de manipuler toutes sortes d'objets :
  • les objets système comme le système de fichiers du serveur (pour créer, copier, manipuler des fichiers ou des répertoires entiers)
  • le système lui-même (pour manipuler la base de registre et l'environnement et pour démarrer des programmes indépendants)
  • des bases de données, directement ou via ODBC
  • d'autres objets spécialisés, comme par exemple des objets donnant accès à l'envoi d'e-mails depuis le langage (p. ex. JMail). A noter qu'il est possible d'agir sur des objets de type document Word ou Excel pour autant que ces logiciels soient installés sur le serveur. Il serait donc tout à fait possible de faire exécuter une macro Word depuis une page web, puis d'en récupérer le contenu (disons un fichier texte) et de l'afficher sur le web. Evidemment, il y a souvent des solutions plus simples que cela!

4. Un environnement gratuit pour le développement et le débogage d'ASP ?  (OB 06.01.05, 12:50) 
O
   Gratuit... enfin presque. Il est très facile de programmer de l'ASP dans l'éditeur d'Excel. La seule chose qui ne soit pas disponible (et encore, je n'ai pas fouillé), c'est l'objet Response.
En pratique, il suffit de remplacer la fonction Response.Write par une fonction ad hoc (je l'appelle Ecrire, ce qui est plus court à taper de toutes façons) et de l'utiliser pour afficher les résultats.
Selon les cas, j'affiche une écriture à la fois, ou je la stocke dans une variable pour l'afficher en fin de processus ou encore j'écris le tout dans un fichier.
Si on a besoin d'accéder à d'autres fonctions de l'environnement Web, ce n'est pas vraiment possible, mais cela concerne typiquement une petit partie du code, qui doit, elle être développée et testée directement sur un serveur Web.
Ce qui est super, c'est de pouvoir regarder ses variables (surout les tableaux) en ligne, et d'explorer les divers objets. On gagne un temps fou si on développe des choses compliquées. Pour les choses simples, je fais le tout à la main dans FrontPage ou Notepad, c'est plus rapide et je combats les bugs en programment de manière très incrémentelle et en testant à chaque étape avant de passer plus loin.

5. L'objet ADO (ActiveX Data Objects)  (OB 06.09.05, 10:01) 
O
   C'est probablement l'objet le plus utile à long terme, car il permet l'accès à des bases de données, non seulement pour les lire mais également pour y écrire et même pour les créer et les modifier plus profondément (création de nouvelles tables par exemple).
L'association PHP-MySQL a fait énormément pour populariser le langage PHP pour la création de pages web dynamiques incluant des données dynamiques, mais l'association ASP-ADO est plus ancienne, très stable et permet d'accéder à toutes sortes de bases de données, puis que c'est seulement par le connecteur ODBC qu'elles diffèrent.
Ce site très utile explique comment créer une connexion ODBC en direction de toutes sortes de bases de données : du simple fichier texte à une base SQL Server ou Oracle, en passant par des fichiers Excel.

6. L'objet File System  (OB 06.09.05, 09:58) 
O
   Cet objet permet d'accéder à l'intégralité du système de fichiers sur le serveur. Il est à noter qu'il n'est pas possible d'accéder à des disques réseaux sur d'autres machines (il y a des moyens d'y parvenir, cependant). Il est très utile de pouvoir lire et créer des fichiers depuis une page web, par exemple pour noter les accès ou pour créer depuis de web des fichiers de configuration. Il n'est souvent pas nécessaire de recourir à une base de données pour des opérations très simples, comme par exemple lire une liste des utilisateurs autorisés à faire une opération. Un simple fichier texte placé dans un répertoire connu (par exmple là même où se trouve le fichier ASP) permet de gérer très simplement la sécurité.

7. Créer une copie d'un fichier avec l'object FileSystem  (OB 04.09.06, 17:22) 
O
   Voici un petit morceau de code qui permet de simplement copier un fichier sur un autre.

Sub copyFile(fromFile,toFile)

Dim fso, MyFile

Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.GetFile(fromFile)
MyFile.Copy (toFile)

End Sub

8. L'objet WScript  (OB 06.09.05, 10:02) 
O
   ... à compléter

9. Ecriture d'une fonction Excel qui renvoie une matrice  (OB 07.07.06, 18:31) 
O
   C'est tout simple : il suffit de créer dans la fonction la matrice en question. Si vous voulez retourner p. ex. la moyenne et les valeurs min et max d'une plage de cellulles reçues comme paramètre, voici le code correspondant :



10. Comment télécharger un fichier sur le serveur depuis une page HTML ?  (OB 29.08.06, 10:06) 
O
   Cela faisait longtemps que je charchais comment faire cela, maintenant j'ai trouvé plusieurs solutions, toutes gratuites et fonctionnant de manière simple en ASP sans installation de contrôles supplémentaires.

Voici celles que j'ai trouvées efficaces:
  • Pure ASP Upload de Lewis Moten, semble-t'il l'ancêtre de ces routines (chez ASP101). Cette routine permet aussi bien de sauver le fichier comme un fichier sur le serveur que comme un champ binaire dans une base de données.
  • Une version similaire mais sur une base complètement différente, avec la possibilité de filtrer les extensions indésirables est offerte par les gens de 20/20. C'est celle que je recommande, surtout pour de grands fichiers. Ils ont aussi un exemple permettant le téléchargement simultané de plusieurs fichiers.
Pour que les procédures d'upload puissent fonctionner sans restriction, il faut configurer le serveur Web pour qu'il accepte des envois dépassant les 200K, sinon il sseront refusés en créant une erreur 403. Voir le point suivant pour la procédure à suivre.

11. Télécharger de grands fichiers sur le serveur web sous IIS 6.0  (OB 29.08.06, 10:08) 
O
   (Ce texte a été repris depuis le site www.aspsmart.com)

IIS6.0 prevents the upload of large files (+200Ko)


For IIS6.0 users, the AspMaxRequestEntityAllowed property specifies the maximum number of bytes allowed in the entity body of an ASP request. If a Content-Length header is present and specifies an amount of data greater than the value of AspMaxRequestEntityAllowed, IIS returns a 403 error response. This property is related in function to MaxRequestEntityAllowed, but is specific to ASP request. Whereas you might set the MaxRequestEntityAllowed property to 1 MB at the general World Wide Web Publishing Service (WWW Service) level, you may choose to set AspMaxRequestEntityAllowed to a lower value, if you know that your specific ASP applications handle a smaller amount of data.

Open your MetaBase.XML which is located in c:\Windows\System32\Inetsrv find the line AspMaxRequestEntityAllowed and change its valule from 204800 to 1073741824.

This change does not require stopping IIS, but to make the Metabase.xml file write-able, you need to go to the IIS control panel, right click the server, select properties, and check the box that says "allow changes to MetaBase configuration while IIS is running". Note : the original page says to check off the option, which is incorrect. The default value is on, which means that there is no need to change anything there.


Cette opération peut constituer un problème si on n'a pas accès à la métabase du serveur (chez un hébergeur). Il faut également noter que c'est un réglage global, valable pour tous les sites hébergés par un serveur...

Sous IIS 7, c'est plus simple, comme le montre cet article.

12. Télécharger de grands fichiers depuis le serveur web sous IIS 6.0  (OB 22.09.06, 11:57) 
O
   Le problème est très similaire au précédent : on m'a signalé à plusieurs reprises qu'il n'était pas possible de télécharger de grands fichiers depuis l'extérieur de l'EPFL. A l'intérieur, on ne constate pas ce problème, probablement à cause de la façon dont IIS voit le monde. Toujours est-il que par défaut le plus grand fichier qui peut être téléchargé depuis le serveur web fait envoron 4 MB, ce qui de nos jours n'est pas grand chose...

Voici comment remédier à ce problème en changeant une valeurs dans la base de registre.

Ouvrir la métabase selon les indications de l'article ci-dessus, puis chercher la valeur AspBufferingLimit qui a pour valeur par défaut 4194304. Changer cette valeur pour quelque chose de plus grand, comme par exemple 41943040, environ 40 MB ce qui n'est pas si mal à l'heure actuelle.

En fait, si on veut pouvoir télécharger des fichiers de taille indéterminée sans (trop) solliciter le serveur, il vaut mieux écrire les données par petites portions, en utilisant la méthode Read de l'objet Stream. C'est ce que j'ai fait dans la page Upload du site i-concrete.

13. Comment envoyer un fichier à l'utilisateur pour qu'il l'enregistre  (OB 29.08.06, 13:27) 
O
   Bien souvent, on désire mettre un document à disposition de l'utilisateur, mais, si le type de document est connu du navigateur (fichier texte, PDF, plusieurs types d'images, mais aussi selon les cas fichier Excel ou Word), le navigateur ouvrira directement le document. C'est bien, mais cela peut nécessiter des opérations que la plupart des utilisateurs ne savent pas (bien) faire.

J'ai trouvé une référence qui permet de montrer une liste de fichiers, de l'afficher et de la faire télécharger par l'utilisateur (merci à ASP101. C'est vraiment pas mal, je vais voir comment implémenter cela dans le cadre des sites web de l'IS-BETON.

14. Inverse de Server.URLEncode  (OB 09.01.07, 17:18) 
O
   Si on désire faire cette opération, ce n'est pas directement possible en ASP, mais c'est possible en utilisant une fonction JavaScript tournant sur le serveur. Inutile de dire que je n'ai pas trouvé cela tout seul! Mais ça marche bien, sans effets secondaires apparents.
<script language=JavaScript RUNAT=SERVER>
// This function decodes the any string
// that's been encoded using URL encoding technique
function URLDecode(psEncodeString) 
{
  return unescape(psEncodeString); 
}
</script>
Si on veut en plus supprimer les "+" qui sont ajoutés par URLEncode, on peut utiliser cette fonction similaire :
<script language=JavaScript RUNAT=SERVER>
// This function decodes the any string
// that's been encoded using URL encoding technique
function URLDecode(psEncodeString) 
{
  // Create a regular expression to search all +s in the string
  var lsRegExp = /\+/g;
  // Return the decoded string
  return unescape(String(psEncodeString).replace(lsRegExp, " ")); 
}
</script>
Source de cette information : Manohar Kamath

15. Configuration des redirections sous IIS6  (OB 15.06.09, 12:15) 
O
   La redirection est utile notamment en cas de changement de nom d'un serveur web (par suite du changement de nom de l'unité, p. ex. !) Evidemment, la première solution à considérer est de simplement ajouter le nouveau site à la liste de adresses (host headers) reconnus par le serveur, et le tour est joué en un clin d'oeil.
Mais cette approche a ses limites. Notamment parce que les deux sites continuent à exister simultanément. Un utilisateur qui a un lien vers l'ancien site pourra continuer à l'utiliser ad infinitum, et créera lui-même des raccourcis sur l'ancien-site qui fonctionneront aussi. Conséquence: l'ancien site aura tendance à ne jamais disparaître.

La solution pour pousser à la disparition de l'ancien site est de créer des redirections vers le nouveau site: chaque fois que le serveur reçoit une demande pour une page de l'ancien site, il la redirige automatiquement sur la page coprrespondante du nouveau. Cela de manière transparente et instantanée (pas de page disant si vous n'êtes pas redirigé automatiquement dans 5 secondes, veuillez suivre le lien suivant...).

Pour cela, il faut procéder de la manière suivante :
  1. Créer un nouveau site web avec pour nom le nom de l'ancien site (!)
    Ce site peut pointer vers le même répertoire que le site actuellement en fonction.
  2. Définir que ce site reçoit les demandes adressées au serveur web pour le site en question (host-headers).
    Pour ce faire, dans Web site, activer l'option Advanced et ajouter que ce site répondra aux requêtes adressées à <Nouveau site>
  3. Supprimer les définitions de host-headers qui existent dans le site actuellement en fonction
  4. Définir dans Home Directory que ce site est une Redirection to a URL.
    Dans Redirect to, introduire précisément ce qui suit: http://<nom du nouveau site>$S$Q.
    Lien pour la référence des redirections vers une URL dans IIS 6
  5. Activer The exact URL above
  6. Activer A permanent redirection for this resource