perlwin32faq6 - Info serveur web


NOM

perlwin32faq6 - Info serveur web

Retour en haut de la page


DESCRIPTION

Configuration et dépannage de Perl pour Win32 et d'un serveur web

Quels serveurs HTTP supportent Perl pour Win32 ?

La plupart des serveurs Windows qui utilisent le standard CGI ou ISAPI exécuteront les scripts ActivePerl. Les serveurs suivants sont connus comme fonctionnant avec ActivePerl (protocoles connus entre crochets) :

Apache for Win32 [CGI, mod_perl]
    http://www.apache.org
    mod_perl home page: http://perl.apache.org
Microsoft Internet Information Server [CGI, ISAPI]
    http://www.microsoft.com/iis/
iPlanet Enterprise and FastTrack Server [CGI]
    http://www.iplanet.com/

[Pour une liste de serveurs web, voir : http://www.netcraft.com/survey/servers.html -NdT]

Comment utiliser Perl pour Win32 sous Apache ?

Si vous voulez stocker tous vos scripts CGI dans un seul répertoire, ajouter la ligne suivante au fichier srm.conf (vous pouvez prendre le répertoire de votre choix, mais vérifiez qu'il existe) :

    ScriptAlias /cgi-bin/ "C:/Program Files/Apache Group/Apache/cgi-bin/"

Après ce changement, arrêter et redémarrer le service Apache.

Apache fournit une émulation de la syntaxe UNIX shebang (#!/chemin/du/perl), donc l'étape suivante est facile. Vous pouvez mettre vos scripts Perl dans votre répertoire cgi-bin, tant qu'ils commencent par le chemin de l'interpréteur. Par exemple :

    #!C:\PERL\5.00464\bin\MSWin32-x86\perl.exe
    use CGI qw(:standard) ;
    print header();
    print "Hello, world";

Si vous voulez activer les scripts CGI en fonction de l'extension, comme .pl, vous devez rajouter la ligne suivant au fichier srm.conf :

    AddHandler cgi-script .pl

Par défaut, les scripts CGI ne sont pas autorisés dans la racine du web, mais le sont dans les autres répertoires documents . Les répertoires documents sont créés avec la commande Alias dans srm.conf :

    Alias /ResourceKit/ "E:/utilsamp/"

Vous pouvez alors inclure des fichiers qui finissent en .pl dans un répertoire document. Vous aurez encore besoin d'inclure la ligne #! avec le chemin complet à l'interpréteur perl.exe, comme expliquer plus haut.

Si vous voulez autoriser les scripts CGI dans la racine du web, ajouter l'option ExecCGI aux directives d'Options entre les entrées <Directory> et </Directory> du fichier access.conf de la racine du web (cela se trouve après le commentaire :

    # This should be changed to whatever you set DocumentRoot to.

Après changement, les directives d'Options devraient ressembler à :

    Options Indexes FollowSymLinks ExecCGI

Comment configurer IIS 3.0 ou moins pour supporter ActivePerl ?

Par défaut, l'installation de ActivePerl associe les extensions .plx à Perl pour ISAPI. Vous pouvez modifier l'extension utilisée pendant l'installation. Parce que l'installation ne fait cela que si IIS est déjà installé, vous devez installer IIS d'abord, puis ActivePerl. Si vous avez besoin de reconfigurer ces points, ou si vous devez les initialiser à la main, les instructions de cette section vous seront utiles.

Microsoft Internet Information Server (IIS) est livré avec Windows NT Server. Peer Web Services (PWS) est livré avec Windows NT Workstation. La configuration est pratiquement la même. D'abord, vous devriez consulter le Chapitre 8, Publication d'Informations et d'Applications, dans la documentation IIS.

Lisez aussi l'article de la base de connaissance Microsoft couvrant le sujet, ``Configurer et Tester un Script PERL [sic] avec IIS,'' disponible sur http://www.microsoft.com/kb/articles/q150/6/29.htm .

Vous devez suivre ces étapes pour faire fonctionner les scripts Perl pour Win32 sous IIS :

  1. Associez l'extension de vos scripts avec l'interpréteur approprié dans les associations de scripts pour IIS. C'est sous la clef de registre HKEY_LOCAL_SYSTEM, avec la sous-clef «System\CurrentControlSet\Services\W3SVC\Parameters\Script Map». Beaucoup de gens associent deux extensions : une avec perl.exe (par exemple, .pl) et une autre à PerlIS.dll (par exemple, .plx). Notez qu'associer une extension dans l'association de scripts n'est pas la même chose qu'associer l'extension dans l'explorateur. Utiliser les chemins complets des exécutables dans l'association de scripts.

  2. Mettez vos scripts dans un répertoire virtuel du serveur qui a les droits d'exécution mais pas de lecture. Vous pouvez ajouter des répertoires virtuels ou voir leurs droits avec le Gestionnaire de Service Internet. Pensez que les URLs des répertoires virtuels peuvent se recouvrir avec les URLs des répertoires de la racine WWW. Par exemple, vous pouvez avoir un répertoire virtuel cgi-bin et un sous-répertoire réel cgi-bin dans la racine WWW.

  3. Vérifier que vos scripts sont accessibles en lecture par le compte utilisé par le serveur IIS. Vous fixer ce compte dans le Gestionnaire de Service Internet ; il est initialisé à IUSR_[le nom de votre serveur] par défaut. Voir aussi Qu'est-ce qu'un service Windows NT ? et Comment assigner des droits à un ficher ?.

  4. Assurez-vous que tous les fichiers nécessaires, comme les binaires perl, les librairies perl, et les modules que vous utilisez, soient en accessibles en lecture par le compte utilisé par le serveur IIS. Voir aussi Qu'est-ce qu'un service Windows NT ? et Comment assigner des droits à un ficher ?.

Vous devez redémarrer le service web après les changements dans le registre ou l'installation de Perl.

Parce que IIS tourne comme un service (voir Qu'est-ce qu'un service Windows NT ?), vous devez prendre des précautions pour être sûr que les fichiers et les variables d'environnement lui soient accessibles.

Comment configurer Microsoft IIS 4.0 pour supporter ActivePerl ?

Microsoft IIS 4.0 est livré avec Windows NT Server 5.0, et PWS 4.0 avec Windows NT Workstation 5.0. Et IIS et PWS sont disponibles dans l'Option Pack de Microsoft Windows NT 4.0. Vous pouvez trouver un lien pour l'Option Pack à http://www.microsoft.com/iis/

Pour configurer IIS ou PWS 4.0 pour utiliser les scripts Perl :

  1. Ouvrez le Gestionnaire de Service Internet IIS 4.0. Cela ouvrira la Console de Management Microsoft avec le snap-in Gestionnaire de Service Internet sélectionné.

  2. Depuis l'arbre affiché à gauche, choisissez le niveau où vous souhaitez appliquer l'association. Vous pouvez sélectionner un serveur complet, un site web, ou un répertoire virtuel donné.

  3. Depuis le menu Actions choisissez Propriétés.

  4. Si vous choisissez d'administrer les propriétés du serveur complet, le dialogue Propriétés du Serveur apparaît. Choisissez le service WWW dans le menu déroulant Propriétés Maîtres. Cela ouvre les Propriétés Maîtres du services WWW. Choisissez l'onglet Répertoire de Base et passez à l'étape 7.

  5. Si vous choisissez d'administrer les propriétés d'un site complet, la feuille de Propriétés du Site Web apparaît. Choisissez l'onglet Répertoire de Base et passez à l'étape 7.

  6. Si vous choisissez d'administrer les propriétés d'un répertoire virtuel, la feuille Propriété d'un Répertoire Virtuel apparaît. Choisissez l'onglet Répertoire Virtuel et passez à l'étape 7.

  7. Cliquez sur le bouton Configuration. Cela ouvre le dialogue Configuration d'Application.

  8. Sélectionnez l'onglet Association d'Application et cliquez Ajouter. Vous voyez le dialogue Ajout/Edition d'Association d'Extension.

  9. Pour exécuter Perl comme une application CGI, taper le chemin complet vers perl.exe suivi de %s %s. Quand un script est exécuter, le premier %s sera remplacé par le chemin complet du script, et le second %s sera remplacé par les paramètres du script.

  10. Pour exécuter Perl pour ISAPI, tapez le chemin complet de PerlIS.DLL. %s %s n'est pas utile pour les DLL ISAPI.

  11. Dans le champ Extension, tapez .pl ou .plx (ou n'importe quelle extension que vous voulez utiliser).

  12. L'association d'application est maintenant finie. Cliquez le bouton OK et cliquez OK pour fermer toutes les feuilles de dialogue/propriétés restantes.

  13. Fermez le Gestionnaire de Service Internet de IIS 4.0.

Parce que IIS tourne comme un service (voir Qu'est-ce qu'un service Windows NT ?), vous devez prendre des précautions pour être sûr que les fichiers et les variables d'environnement lui soient accessibles.

Comment configurer les serveurs web iPlanet pour supporter ActivePerl ?

Pour configurer ActivePerl avec FastTrack Server, suivez les étapes suivantes :

  1. Installez FastTrack Server, et vérifiez que vous puissiez visualiser des pages HTML.

  2. Associez les scripts Perl avec l'interpréteur perl, si ce n'est pas déjà fait. Voir Comment associer les scripts Perl à perl ? pour la méthode. Redémarrer le serveur après avoir fait l'association.

  3. Créer un répertoire Shell CGI pour exécuter les scripts Perl. Un répertoire classique CGI ne fonctionnera pas - c'est seulement pour les fichiers exécutables. Pour le créer utilisez FastTrack Administrator ; voir la documentation pour les détails.

Si vous souhaitez accéder aux scripts Perl CGI dans d'autres répertoires, vous devez associer une extension, comme .pl, avec le type MIME shellcgi. Avant de suivre les étapes suivantes, vous devez ajouter au moins un répertoire Shell CGI - cela autorisera shellcgi sur votre serveur (vous pouvez effacer ce répertoire, et shellcgi restera validé). Suivez les étapes suivantes pour associer .pl avec le type MIME shellcgi.

  1. Dans Server Administrator, cliquez Server Preferences, et sélectionnez MIME Types depuis la partie gauche.

  2. Si vous souhaitez utiliser .pl comme extension pour les scripts Perl, trouvez et supprimez le type MIME application/x-perl (il est associé à .pl par défaut).

  3. Ajoutez un nouveau type MIME avec magnus-internal/shellcgi comme Content Type, et pl comme File Suffix. Si un type magnus-internal/shellcgi existe déjà, ajouter simplement pl à la liste File Suffixes. N'incluez pas le point en début d'extension.

  4. Sauvez et appliquez ces changements puis redémarrez le serveur. Vous devriez pouvoir mettre un script Perl CGI dans n'importe quel répertoire, pourvu que le nom du script ait l'extension .pl.

Si vous avez des problèmes à utiliser les scripts Perl sur votre serveur Netscape, vérifiez les points suivants :

Un avantage du serveur FastTrack est que les logs d'Erreurs donnent des détails sur les raisons pour lesquelles votre script CGI ne fonctionne pas, c'est donc un bon endroit où chercher en cas de problèmes de configuration.

Parce que les serveurs iPlanet tournent comme des services (voir Qu'est-ce qu'un service Windows NT ?), vous devez prendre des précautions pour être sûr que les fichiers et les variables d'environnement leur soient accessibles.

Certains ont signalé des problèmes avec les données POSTées par des programmes Perl avec les serveurs iPlanet. Comme iPlanet utilise apparemment les associations pour exécuter les scripts, et que les données POSTées sont envoyées au programme par STDIN, cela peut être relatif au problème de redirection.

Comment configurer Microsoft Personal Web Server 1.0x pour Windows 95 pour supporter ActivePerl ?

Microsoft Personal Web Server pour Windows 95 est une version dégradée de Microsoft Internet Information Server. Bien que non documenté, il apparaît que la méthode utilisée pour le support de Perl pour Win32 avec IIS marche aussi avec Personal Web Server. Voir Comment configurer IIS 3.0 ou moins pour supporter ActivePerl ?

Comment configurer d'autres serveurs web pour supporter ActivePerl ?

Si votre serveur web n'est pas listé, consulter la documentation du serveur sur la manière de configurer l'interpréteur CGI. En général le processus est le suivant :

Parce que la plupart des serveurs tournent comme un service (voir Qu'est-ce qu'un service Windows NT ?), vous devez prendre des précautions pour être sûr que les fichiers et les variables d'environnement leur soient accessibles.

Mon programme fonctionne bien en ligne de commande, mais explose quand il tourne en script CGI

Habituellement, cela signifie deux choses : soit votre système est mal configuré, soit votre script ne produit pas des sorties correctes pour un script CGI.

Avant de faire quoi que ce soit, consulter cette liste :

Testez les informations ci-dessus avec un script dont vous êtes sûr qu'il produit la bonne sortie pour le protocole CGI (les scripts de cette FAQ sont un bon choix de départ). Essayez avec votre script une fois que vous êtes sûr que le script test fonctionne.

Si vous êtes sûr que le serveur exécute le script, mais qu'il ne génère que des messages d'erreur dans votre navigateur, il existe des outils pouvant vous aider. CGI::Carp est utilisé pour envoyer des informations de débuggage au navigateur ou sur un fichier log. Même si votre script a une erreur de compilation, il peut habituellement intercepter et signaler l'erreur. Pour utiliser CGI::Carp, incluez les lignes suivantes dans votre programme :

    # Ce qui est dans le bloque BEGIN sera exécuté très tôt
    # avant que le reste du script soit interprété.
    #
    BEGIN {
        # Use the CGI::Carp module and import the carpout() function.
        #
        use CGI::Carp qw(carpout);
        # Send warnings and die messages to the browser.
        #
        carpout(STDOUT);
    }

Si votre script contient une erreur, vous devriez voir quelque chose comme ça dans votre navigateur :

    [Wed Jun 3 09:32:28 1998] C:\inetpub\scripts\test.pl: Error message! at
    C:\inetpub\scripts\test.pl line 38.

Quelques fois, il peut être utile de vous mettre à la place de quelqu'un d'autre. Le paquetage libwww-perl (LWP) est disponible sur CPAN, mais vous pouvez l'installer en utilisant le Gestionnaire de Paquetage Perl (PPM). LWP sera peut-être inclus dans les prochaines versions de ActivePerl. [Le paquetage libwww-perl est inclus dans ActivePerl depuis la version 5.6.1 -NdT]

LWP inclus le puissant script lwp-request, qui vous laisse voir les choses du point de vue du navigateur. Invoquez lwp-request avec le nom d'une URL pour voir le contenu de la réponse, comme dans lwp-request http://localhost. Pour inspecter les en-têtes des réponses HTTP, appeler lwp-request avec l'option -de :

    C:\>lwp-request -de http://localhost
    Date: Wed, 03 Jun 1998 13:37:31 GMT
    Accept-Ranges: bytes
    Server: Microsoft-IIS/4.0
    Content-Length: 4325
    Content-Location: http://localhost/Default.htm
    Content-Type: text/html
    ETag: "0c1e58b063bd1:1237"
    Last-Modified: Thu, 09 Apr 1998 12:09:28 GMT
    Client-Date: Wed, 03 Jun 1998 13:37:31 GMT
    Client-Peer: 127.0.0.1:0

Cet outil peut-être très utile pour voir ce que votre script fait. Quel que soit le résultat, ne désespérez pas. Il est possible, vraiment, de faire fonctionner un script Perl sur votre serveur web. Promis.

C'est nul ; pourquoi ne pas mettre perl.exe dans mon répertoire CGI et l'utiliser dans mon URL ?

Premièrement, l'avertissement : NE FAITES PAS ÇA. MÊME SI VOUS NE SAVEZ PAS POURQUOI, NE LE FAITES PAS.

Maintenant l'explication : l'idée est de mettre perl.exe dans votre répertoire CGI (configurer sur votre serveur), et d'utiliser la syntaxe d'URL suivante :

    http://soon.to.be.a.victim.net/cgi-bin/perl.exe?myscript.pl

pour exécuter myscript.pl. Cela vous permet de ne pas avoir à vous soucier de configurer votre serveur pour associer les fichiers d'extension .pl avec un interpréteur comme perl.exe.

En fait, dans certains anciens serveurs web Win32 (les serveurs iPlanet 1.x en particulier), il était impossible d'associer un script avec un interpréteur. Cette méthode était recommandée par certains vendeurs comme une approche viable pour exécuter des scripts Perl avec le serveur web.

N'importe qui avec un esprit vicieux et un peu de connaissance Perl peut voir qu'avec cette configuration, les pirates peuvent commencer à faire toutes sortes de choses désagréables au serveur. Tout ce qu'ils ont à faire est d'envoyer des URLs manuellement, avec l'option -e sur la ligne de commande pour perl.exe, pour faire des choses comme effacer tous les fichiers d'un disque :

    http://aaaugh.that.hurts.net/cgi-bin/perl.exe?-e?'del%20c:\*.*%20/S%20/Q'

Bien sûr, un vrai criminel informatique ne fera jamais quelque chose d'aussi évident, et à la place utilisera cette possibilité comme base pour causer des dégâts irréparables à votre organisation.

L'URL suivante couvre le sujet plus en détail :

    http://www.cert.org/advisories/CA-1996-11.html

Tom Christiansen a également écrit un bon article à ce sujet :

    http://www.perl.com/perl/news/latro-announce.html

Notez qu'une des solutions suggérées pour résoudre ce problème et d'inclure votre Perl script dans un fichier batch en utilisant pl2bat, ou votre code personnalisé. CE N'EST PAS BON NON PLUS. La plupart des serveurs qui n'autorisent pas les associations de fichiers sont aussi susceptible d'avoir un bug qui permet à un utilisateur de passer n'importe quelle commande DOS après un fichier batch.

Retour en haut de la page


AUTEUR ET COPYRIGHT

Cette FAQ a été à l'origine assemblée et maintenue par Evangelo Prodromou. Elle a été révisée et mise à jour par Brian Jepson de O'Reilly and Associates, et David Grove et David Dmytryshyn d'ActiveState.

Cette FAQ est dans le domaine public. Si vous l'utilisez, cependant, vérifiez, s'il vous plaît, que vous donniez le crédit aux auteurs originaux.

Retour en haut de la page


VERSION FRANÇAISE

Cette traduction française correspond à la version anglaise distribuée avec perl 5.8.0. Pour en savoir plus concernant ces traductions, consultez http://www.enstimac.fr/Perl/ .

Retour en haut de la page


TRADUCTION EN FRANÇAIS

Fabien Martinet <ho.fmartinet@cma-cgm.com>

Jean-Louis Morel <jl_morel@bribes.org> (mise à jour perl 5.8.0)

Retour en haut de la page

 perlwin32faq6 - Info serveur web