=head1 NOM perlwin32faq6 - Info serveur web =head1 DESCRIPTION Configuration et dépannage de Perl pour Win32 et d'un serveur web =head2 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) : =over =item Apache for Win32 [CGI, mod_perl] http://www.apache.org mod_perl home page: http://perl.apache.org =item Microsoft Internet Information Server [CGI, ISAPI] http://www.microsoft.com/iis/ =item iPlanet Enterprise and FastTrack Server [CGI] http://www.iplanet.com/ =back [Pour une liste de serveurs web, voir : http://www.netcraft.com/survey/servers.html -NdT] =head2 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 I (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 I, 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 I<.pl>, vous devez rajouter la ligne suivant au fichier I : 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 I : Alias /ResourceKit/ "E:/utilsamp/" Vous pouvez alors inclure des fichiers qui finissent en I<.pl> dans un répertoire document. Vous aurez encore besoin d'inclure la ligne #! avec le chemin complet à l'interpréteur I, 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 EDirectoryE et E/DirectoryE du fichier I 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 =head2 Comment configurer IIS 3.0 ou moins pour supporter ActivePerl ? Par défaut, l'installation de ActivePerl associe les extensions I<.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 : =over =item 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 I (par exemple, I<.pl>) et une autre à I (par exemple, I<.plx>). Notez qu'associer une extension dans l'association de scripts n'est I la même chose qu'associer l'extension dans l'explorateur. Utiliser les chemins complets des exécutables dans l'association de scripts. =item 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 I et un sous-répertoire réel I dans la racine WWW. =item 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 L et L. =item 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 L et L. =back 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 L), vous devez prendre des précautions pour être sûr que les fichiers et les variables d'environnement lui soient accessibles. =head2 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 : =over =item 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é. =item 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é. =item 3. Depuis le menu Actions choisissez Propriétés. =item 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. =item 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. =item 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. =item 7. Cliquez sur le bouton Configuration. Cela ouvre le dialogue Configuration d'Application. =item 8. Sélectionnez l'onglet Association d'Application et cliquez Ajouter. Vous voyez le dialogue Ajout/Edition d'Association d'Extension. =item 9. Pour exécuter Perl comme une application CGI, taper le chemin complet vers I suivi de C<%s %s>. Quand un script est exécuter, le premier C<%s> sera remplacé par le chemin complet du script, et le second C<%s> sera remplacé par les paramètres du script. =item 10. Pour exécuter Perl pour ISAPI, tapez le chemin complet de I. C<%s %s> n'est pas utile pour les DLL ISAPI. =item 11. Dans le champ Extension, tapez I<.pl> ou I<.plx> (ou n'importe quelle extension que vous voulez utiliser). =item 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. =item 13. Fermez le Gestionnaire de Service Internet de IIS 4.0. =back Parce que IIS tourne comme un service (voir L), vous devez prendre des précautions pour être sûr que les fichiers et les variables d'environnement lui soient accessibles. =head2 Comment configurer les serveurs web iPlanet pour supporter ActivePerl ? Pour configurer ActivePerl avec FastTrack Server, suivez les étapes suivantes : =over =item 1. Installez FastTrack Server, et vérifiez que vous puissiez visualiser des pages HTML. =item 2. Associez les scripts Perl avec l'interpréteur perl, si ce n'est pas déjà fait. Voir L pour la méthode. Redémarrer le serveur après avoir fait l'association. =item 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. =back Si vous souhaitez accéder aux scripts Perl CGI dans d'autres répertoires, vous devez associer une extension, comme I<.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 I<.pl> avec le type MIME shellcgi. =over =item 1. Dans Server Administrator, cliquez Server Preferences, et sélectionnez MIME Types depuis la partie gauche. =item 2. Si vous souhaitez utiliser I<.pl> comme extension pour les scripts Perl, trouvez et supprimez le type MIME application/x-perl (il est associé à I<.pl> par défaut). =item 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. =item 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 I<.pl>. =back Si vous avez des problèmes à utiliser les scripts Perl sur votre serveur Netscape, vérifiez les points suivants : =over =item * Assurez-vous que le script est en lecture pour le compte utilisé par le service iPlanet . En général, cela signifie que le script est en lecture pour le groupe Tout le Monde. =item * Vérifiez que tous les fichiers nécessaires, comme les binaires perl, les librairies perl, et les modules que vous utilisez, soient accessibles en lecture par le compte utilisé par le service iPlanet (i.e., le groupe Tout le Monde). =back 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 L), 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. =head2 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 L =head2 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 : =over =item * Associer une extension de fichier comme I<.pl> avec le binaire perl, et faire connaître au serveur où trouver ce binaire. Cela peut-être par une association shell (voir L), ou une association personnalisée. =item * Créer un répertoire où les scripts exécutables iront, et y mettre les scripts Perl. =item * Assurez-vous que le compte utilisateur utilisé par le serveur web peut lire les scripts ainsi que les fichiers liés (binaires perl, librairies, modules, etc.). En général, cela implique que les fichiers soient en lecture pour le groupe Tout le Monde. =back Parce que la plupart des serveurs tournent comme un service (voir L), vous devez prendre des précautions pour être sûr que les fichiers et les variables d'environnement leur soient accessibles. =head2 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 : =over =item * Vérifiez que vous avez correctement configuré votre serveur pour I ou I. C'est souvent accompli en associant une extension spécifique, comme I<.pl> ou I<.plx>, à I ou I. D'habitude, les serveurs s'appuient sur leurs associations internes, plutôt que celle de la ligne de commande Windows. =item * Si votre serveur web s'appuie sur la variable C pour trouver I, vérifier que vous avez mis I dans votre C système, pas uniquement dans votre variable utilisateur. Ceci est valable uniquement pour Windows NT. =item * Si votre serveur requiert que les répertoires soient marqués comme exécutables, vérifier que le répertoire contenant le script soit défini comme tel. =item * Puisque le serveur web peut-être configuré pour tourner comme un utilisateur local, vérifier que cet utilisateur a accès au fichier du script, au binaire Perl et aux librairies. Beaucoup de serveurs web tournent sous le compte "Local System", qui a généralement les permissions suffisantes. =item * Si I ou Perl pour ISAPI ne fonctionnent pas comme attendu, consulter les logs d'événements pour des indices. =back Testez les informations ci-dessus avec un script dont vous êtes sEr 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 sEr 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 I, qui vous laisse voir les choses du point de vue du navigateur. Invoquez I avec le nom d'une URL pour voir le contenu de la réponse, comme dans C. Pour inspecter les en-têtes des réponses HTTP, appeler I avec l'option C<-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. =head2 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 I 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 I. Cela vous permet de ne pas avoir à vous soucier de configurer votre serveur pour associer les fichiers d'extension I<.pl> avec un interpréteur comme I. 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 C<-e> sur la ligne de commande pour I, 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. =head1 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. =head1 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/ . =head1 TRADUCTION EN FRANÇAIS Fabien Martinet Jean-Louis Morel (mise à jour perl 5.8.0) =cut