perlwin32faq7 - Programmation Web


NOM

perlwin32faq7 - Programmation Web (CGI et PerlIS)

Retour en haut de la page


DESCRIPTION

Développement Web avec Perl pour Win32

Qu'est-ce que HTTP et comment avoir plus d'informations dessus ?

HTTP (HyperText Transfer Protocol) est le protocole que les navigateurs utilisent pour communiquer avec les serveurs web. Les spécifications officielles pour le standard HTTP sont disponibles sur le serveur web du W3 Consortium à :

    http://www.w3.org/pub/WWW/Protocols/

Des instructions plus accessibles sont sur la page HTTP de Yahoo à :

    http://www.yahoo.com/Computers_and_Internet/Internet/World_Wide_Web/HTTP/

Qu'est-ce que CGI et comment avoir plus d'informations dessus ?

CGI (Common Gateway Interface) est un protocole utilisé par les serveurs web pour exécuter des programmes. Les scripts qui supportent le protocole CGI sont quelques fois appelés «scripts CGI»; cela conduit à l'interprétation erronée que CGI est un langage.

Les informations classiques sur CGI sont disponibles sur le serveur NCSA à :

    http://hoohoo.ncsa.uiuc.edu/cgi/

Si vous ne l'avez pas encore lu, lisez-le maintenant. Si cela ne vous convient pas, vous pouvez aller sur la page Yahoo sur les CGI à :

    http://dir.yahoo.com/Computers_and_Internet/Software/Internet/World_Wide_Web/Servers/Server_Side_Scripting/Common_Gateway_Interface__CGI_/

(C'est une seule URL)

Essayer aussi les URL suivantes pour la programmation CGI en Perl:

    http://www.perl.com/CPAN-local/doc/FAQs/cgi/perl-cgi-faq.html

Si cela ne vous convient pas, achetez un des livres «devenez riche rapidement en écrivant des scripts CGI» chez votre libraire habituel.

Comment retourner un fichier graphique depuis un script CGI ?

Une des grandes différences entre les plates-formes UNIX et Win32 est que, sur Win32, il y a une différence entre les fichiers texte ou ASCII et les fichiers binaires. Pour retourner un fichier graphique, vous devez spécifier que le fichier est binaire, et que la sortie standard doit accepter les données binaires. Essayez quelque chose comme :

    $MY_FILE_NOM = 'Penelope.jpg';
    $CHUNK_SIZE = 4096;
    open( MY_FILE, "<$MY_FILE_NOM" )
        or die( "Can't open $MY_FILE_NOM: $!\n" );
    print "Content-type: image/jpeg\r\n";
    print "\r\n";
    binmode( MY_FILE ); # Ceci est très important !
    binmode( STDOUT );
    while ( $cb = read( MY_FILE, $data, $CHUNK_SIZE ) ) {
        print $data;
    }
    close( MY_FILE );

Mes scripts CGI ne semblent pas fonctionner avec PerlIS.

Les versions précédentes de Perl pour ISAPI ne renvoyaient pas les en-têtes correctement, et cela amenait les scripts Perl pour ISAPI à mal fonctionner. Vous pouviez contourner cela dans les versions précédentes de PerlIS en envoyant les en-têtes en début de script comme ceci :

    print <<"END";
    HTTP/1.0 200 OK
    Content-Type: text/html
    END

Cela n'est plus nécessaire avec la version courante de Perl pour ISAPI, puisqu'il envoie les en-têtes corrects. La valeur du registre qui pilote ceci est EnableCGIHeader, une valeur REG_WORD qui est positionnée à 1 par défaut. Cette valeur est stockée sous la clé du registre HKEY_LOCAL_MACHINE\SOFTWARE\ActiveState\PerlIS. Si vous devez arrêter la génération automatique de l'en-tête, positionner cette valeur à 0.

Comment mes scripts savent-ils qu'ils utilisent ActivePerl ou Perl pour ISAPI?

Perl pour ISAPI positionne une variable d'environnement, PERLXS, pour les scripts exécutés sous Perl pour ISAPI.

    my $running_under_perlis = $ENV{PERLXS} eq 'PerlIS';

Comment mes scripts savent-ils qu'ils utilisent ActivePerl ou Perl pour WebSite?

Perl pour WebSite positionne une variable d'environnement, PERLXS, pour les scripts exécutés sous Perl pour WebSite.

    my $running_under_perlws = $ENV{PERLXS} eq 'PerlWS';

Quels modules CGI tournent sous ActivePerl ?

Le module CGI.pm fonctionne avec ActivePerl. Il est inclus dans la distribution ActivePerl, et vous pouvez l'utiliser dans vos programmes avec l'instruction use CGI. Une documentation complète pour le module CGI est comprise dans le module, et peut être lue avec perldoc CGI.

Comment utiliser les redirections dans mes scripts ?

Vous pouvez utiliser les redirections pour faire pointer le navigateur client sur un autre fichier ou script, habituellement de manière transparente pour l'utilisateur. Le module CGI fournit la fonction redirect() à cette fin. Le code ci-dessous redirige le navigateur client vers http://www.perl.com, et fonctionne avec CGI ou PerlIS :

    use CGI qw(:standard);
    print redirect('http://www.perl.com');

Qu'est-ce que les cookies et comment les utiliser ?

Les cookies sont des paquets de données qu'un serveur envoie à un client, comme un navigateur, pour conserver des informations même après que le navigateur ait quitté le site. Cela peut être utilisé pour identifier un client dans des interactions ultérieures ou pour stocker les préférences utilisateurs. Les cookies furent d'abord définis par Netscape, et la définition peut être trouvée sur :

    http://home.netscape.com/newsref/std/cookie_spec.html

Le module CGI fournit le support pour la gestion des cookies. Voir Quels modules CGI tournent sous ActivePerl ? pour les informations sur le module CGI, y compris l'emplacement de la documentation en ligne.

Comment avoir l'adresse email d'un utilisateur ?

Il n'est pas possible, en général, d'obtenir l'adresse email de l'utilisateur sans la lui demander. Si vous avez besoin de l'adresse email, utiliser un formulaire pour la demander à l'utilisateur.

Les spécifications HTTP (voir <Qu'est-ce que HTTP et comment avoir plus d'informations dessus ?>) définissent un champs de l'en-tête de requête HTTP From:, qui contient l'adresse email de l'utilisateur effectuant la connexion. Votre script peut le récupérer en utilisant la variable d'environnement HTTP_FROM. Cependant, le champ est rarement complété et vous ne pouvez pas réellement compter dessus.

Il existe beaucoup de manières subtiles de déterminer d'où vient la requête -- comme de consulter l'adresse IP utilisée pour la connexion -- mais vous ne pouvez pas en déduire l'adresse email de l'utilisateur.

Généralement, il est considéré comme une violation de l'intimité de l'utilisateur d'obtenir son adresse email sans la lui demander. Peut-être est-ce pour cela que c'est si difficile.

J'ai besoin d'un script CGI pour effectuer une tâche, est-ce que quelqu'un l'a déjà fait ?

Vous ne pourrez peut-être pas trouver exactement le script que vous cherchez, mais vous trouverez certainement quelque chose d'adapté à vos besoins.

Quatre des pages de scripts les plus connues sont :

Notez que la plupart des archives de scripts sont orientées scripts UNIX, et vous aurez peut-être à les adapter pour les faire fonctionner (voir Comment faire fonctionner un script prévu pour Unix ?).

C'est une des questions les plus fréquentes sur la liste Perl-Win32-Users. De temps en temps, elle est posée comme ceci : «J'ai un programme à écrire. Voici les spécifications. Merci de me poster la solution pour vendredi». Espérons que le lecteur comprend pourquoi ces messages obtiennent en principe une réponse plutôt sèche, quand ils obtiennent une réponse.

Comment tester mes scripts CGI qui attendent des arguments sans utiliser un serveur web ?

La manière compliquée de tester vos programmes CGI depuis la ligne de commande est d'initialiser des variables d'environnement et un canal d'entrée standard comme ferait un serveur web (voir les spécifications CGI pour plus de détails -- voir Qu'est-ce que CGI et comment avoir plus d'informations dessus ?).

La manière simple est d'utiliser CGI.pm, le module Perl pour la programmation CGI. Il fournit un mécanisme simple pour exécuter les programmes CGI depuis la ligne de commande. Voir Quels modules CGI tournent sous ActivePerl ?.

Le champ Content-Type: que j'utilise dans mon script CGI apparaît sur le navigateur web.

Vous utilisez une vieille version de Perl pour ISAPI comme interpréteur Perl sur un serveur web IIS, et le champ Content-Type: n'est pas renvoyé comme une ligne de statut HTTP. Vous devriez pouvoir régler le problème en installant la dernière version de Perl et PerlIS. Voir Mes scripts CGI ne semblent pas fonctionner avec PerlIS. pour plus de détails.

Quand j'essaye d'exécuter un script CGI depuis mon navigateur, il essaye de télécharger un fichier de type «application/x-perl» à la place.

Votre serveur web est mal configuré. Il ne sait pas qu'il doit exécuter votre programme Perl, donc il le renvoie simplement au navigateur. Voir la page perlwin32faq6 pour des détails sur la manière de configurer votre serveur pour qu'il sache que les scripts Perl doivent être exécutés.

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

 perlwin32faq7 - Programmation Web