IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Modules Perl Discussion :

[débutant] Création d'un module


Sujet :

Modules Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 4
    Par défaut [débutant] Création d'un module
    Bonjour,

    Je suis étudiant et j'ai un projet à réaliser en perl (un site en cgi qui permet de gérer une vidéotheque). J'ai déjà appris un peu de php et en gros on avait créé deux fonctions (un header et un footer) qui étaient communes a toutes les pages. J'aimerai réaliser la meme chose ici mais je n'y arrive pas. J'essaye d'utiliser la fonction require, sans succès, a chaque fois je me retrouve avec une erreur interne au serveur sans plus d'explications. J'aimerai donc savoir comment créer proprement un module cgi en perl...

    Auriez vous un tutoriel la dessus (j'ai lu et essayé celui de ce site mais ca n'a pas marché) ou meme sur les cgi en général car je ne trouve pas grand chose sur le net et mon prof a eu la bonté de me donner un projet en cgi sans faire de cours sur les cgi

    Edit :

    Je viens d'essayer avec un package sans résultat, voici ce que j'ai marqué :
    fichier index.cgi :
    #!C:\Perl\bin\perl.exe -w

    use CGI;
    use strict;
    use theme;
    print "Content-type: text/html\n\n";


    headr();
    print "Ce que je veux écrire";
    footr();
    fichier theme.pm :
    #!C:\Perl\bin\perl.exe -w

    package theme;
    use strict;
    use strict;



    sub headr {
    print "<html><body>\n";
    }

    sub footr {
    print "</body></html>";
    }

    1;

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Ton Theme.pm, écris le plutôt comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    package Theme;
    use strict; use warnings;
    use CGI;
    require Exporter;
    our @ISA = qw(Exporter);
    our @EXPORT = qw(headr footr);
     
     
    sub headr {
      my $query = shift;
      return $query->start_html( "Ma page" );
    }
     
    sub footr {
      my $query = shift;
      return $query->end_html( "Ma page" );
    }
     
    1;
    Voit la doc de Exporter pour plus de détails et plus de possibilités. Par ailleurs, il faut que Theme.pm soit dans @INC, voit le pragma "lib" pour cela.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #!C:\Perl\bin\perl.exe
    use strict; use warnings;
     
    use CGI;
    use lib "le chemin de Theme.pm";
    use Theme;
     
    my $query = CGI->new();
    print $query->header;
     
     
    print headr($query),
           $query->h1("Ce que je veux écrire"),
           footr($query);
     
    __END__
    --
    Jedaï

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 4
    Par défaut
    Merci Jedaï mais en fait j'ai réussi a faire quelque chose qui correspond a ce que je souhaitais avec un require Mais je viens de mélanger un peu mon code avec celui que tu m'as donné, qui est beaucoup mieux

    Je viens de regarder en détail ton code, j'ai a peu près compris le tout, je me demande seulement a quoi sert le :
    my $query=shift;

    Tout ce que je comprends, c'est que si je le mets pas ca plante

    Sinon, j'ai un nouveau probleme : mes feuilles de style sont ignorées
    J'ai écrit le code suivant :
    print $query->start_html( -title => 'Video++', - style => {'src' => 'C:\Program Files\EasyPHP1-8\cgi-bin\style.css'});

    Ca me génère le bon code html mais la feuille de style n'est quand meme pas prise en compte. Est ce que quelqu'un a une idée pour que ca marche?
    J'ai lu les différents topics a ce sujet. C'est donc apparament un problème de chemin mais malgré tous les conseils des autres topics je n'arrive pas a régler mon pb

    Si ca peut aider, voila a quoi ressemble mon arborescence :

    C:\program files\easyphp\cgi-bin\index.cgi
    ___________________________\theme\theme.pl
    _________________________________\style.css

  4. #4
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par Chris51
    Merci Jedaï mais en fait j'ai réussi a faire quelque chose qui correspond a ce que je souhaitais avec un require Mais je viens de mélanger un peu mon code avec celui que tu m'as donné, qui est beaucoup mieux

    Je viens de regarder en détail ton code, j'ai a peu près compris le tout, je me demande seulement a quoi sert le :
    my $query=shift;
    En Perl, les arguments d'une fonction sont accessible dans le tableau @_, shift( @a ) prend le premier élément de @a et le renvoie (tout en le supprimant du tableau), et par défaut shift agit sur @_ (si on est dans une déclaration de fonction, dans le programme principal shift agit par défaut sur @ARGV).
    Aussi my $query = shift; met le premier argument de ta fonction dans $query. $query est censé être l'objet CGI correspondant à la requête courante, donc on peut utiliser les informations qu'il contient pour personnaliser le header ou le footer selon la requête. On n'est pas obligé d'employer une interface orienté objet avec le module CGI, j'ai juste le sentiment que c'est plus clair, après c'est à toi de choisir.


    Citation Envoyé par Chris51
    Sinon, j'ai un nouveau probleme : mes feuilles de style sont ignorées
    J'ai écrit le code suivant :
    print $query->start_html( -title => 'Video++', - style => {'src' => 'C:\Program Files\EasyPHP1-8\cgi-bin\style.css'});

    Ca me génère le bon code html mais la feuille de style n'est quand meme pas prise en compte. Est ce que quelqu'un a une idée pour que ca marche?
    J'ai lu les différents topics a ce sujet. C'est donc apparament un problème de chemin mais malgré tous les conseils des autres topics je n'arrive pas a régler mon pb

    Si ca peut aider, voila a quoi ressemble mon arborescence :

    C:\program files\easyphp\cgi-bin\index.cgi
    ___________________________\theme\theme.pl
    _________________________________\style.css
    C'est plus une question de HTML que de Perl, mais il faut bien comprendre une chose : le client HTTP ne voit pas ton disque et tes répertoires, il ne voit que la partie accessible sous la racine du site, donc quand tu mets un chemin absolu dans ton HTML comme "C:\Program Files\EasyPHP1-8\cgi-bin\style.css", il n'est pas capable d'y accéder (à la limite il essaierait d'y accéder sur son propre ordinateur, mais cela risque d'être interdit par le browser par sécurité). Il faut mettre soit une URL absolue avec indication du domaine : "http://www.ton_domaine.fr/cgi-bin/theme/style.css", soit une URL absolue par rapport à la racine : "/cgi-bin/theme/style.css", soit une URL relative à là où se trouve courantement ton visiteur : "theme/style.css" .

    --
    Jedaï

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 4
    Par défaut
    Merci pour l'explication sur le shift

    Sinon pour le css ca ne marche toujours pas, mais en fait je pense que j'ai mal paramétré mon serveur apache.
    EasyPhp gère les alias, j'ai donc voulu en créer un, mais ca me dit tout le temps FORBIDDEN quand j'essaye d'accéder au script cgi, alors que j'ai bien mis :

    ScriptAlias /cgi-bin/ "${path}/cgi-bin/"

    <Directory "${path}/cgi-bin">
    AllowOverride None
    Options none
    Order deny,allow
    Allow from all
    </Directory>
    dans le httpd.conf du serveur apache.

    Voila ce que donne le log :

    [Tue Apr 17 15:35:42 2007] [error] [client 127.0.0.1] Options ExecCGI is off in this directory: d:/chris/fac/semestre 4/info 44//cgi-bin/index.cgi
    Il faut apparament que j'active l'option ExecCGI pour mes alias mais je comprends pas ou je doit la mettre.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 4
    Par défaut
    C'est bon, c'était bien une erreur de config du serveur.

    Bref maintenant tout marche nickel (meme la css). Merci beaucoup maitre Jedaï

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Cration d'un module de recherche
    Par cyberbiker dans le forum Access
    Réponses: 1
    Dernier message: 16/03/2006, 15h25
  2. [C++] débutant création d'une form
    Par TERRIBLE dans le forum C++
    Réponses: 7
    Dernier message: 10/10/2005, 12h23
  3. [CR][.NET][Débutant] Création d'un Etat groupé
    Par SoaB dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 09/05/2005, 14h28
  4. [Débutante] Création d'une image avec un composant
    Par gwendo dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 09/07/2004, 09h58
  5. [Débutant] Création de procédure stockée
    Par david71 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/06/2004, 18h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo