FAQ CGI
Voir aussi la FAQ PerlQuelques URL :
Disponible également avec les ditributions de Perl
perlfaq9 Programmation réseau.
- Comment configurer mon serveur Web pour reconnaitre les CGI Perl ?
- Quand j'execute mon script, j'ai un "500 Internal Server"
- Existe-t-il des hébergeurs gratuits pour les CGI ?
- Où trouver des scripts CGI ?
- Comment tester ses scripts CGI en local ?
- Comment connaitre le répertoire courant d'un script ?
- Comment récupérer un fichier en dehors du serveur ?
- Comment envoyer un fichier depuis un formulaire ?
- Mon script ne marche pas !
- Récupérer diverses infos sur un utilisateur
- ERROR: flock() unimplemented on this platform
- Comment configurer mon serveur Web pour reconnaitre les CGI Perl ?
- VoirPerlwin32 faq6
- Quand j'execute mon script, j'ai un "500 Internal Server"
- Voir cette page pour les raisons les plus fréquentes.
- Existe-t-il des hébergeurs gratuits pour les CGI ?
- Faire une recherche sur http://www.freewebspace.net/ en spécifiant dans les options "CGI".
- Où trouver des scripts CGI ?
- Voici quelques sites ...
- http://www.cgi-resources.com
- http://www.freecode.com/cgiprog.html
- http://www.cgidir.com
- http://www.scriptarchive.com
- http://lecgi.net
- http://www.scripts-fr.com Moteur de recherche sur les cgi français
- http://www.ftls.org 15 scripts CGI en francais
- http://www.perl-gratuit.com propose aussi des scripts CGI en francais...
- Comment tester ses scripts CGI en local ?
- Voir cette page : Installation de l'environnement CGI
- Comment connaitre le répertoire courant d'un script ?
-
- Première méthode :
#!/usr/bin/perl use CGI qw/:standard :html3 escape unescape/; use CGI::Carp qw/fatalsToBrowser/; print header,`pwd`;
- Une autre, plus propre : (sans appel systême)
#!/usr/bin/perl use CGI qw/:standard :html3 escape unescape/; use CGI::Carp qw/fatalsToBrowser/; use Cwd; print header,cwd;
- Première méthode :
- Comment récupérer un fichier en dehors du serveur ?
-
- Par FTP : en utilisant le package net::FTP
Une fois installée voir perldoc net::FTPuse Net::FTP; $ftp = Net::FTP->new("some.host.name"); $ftp->login("anonymous","mon@adresse.mail"); $ftp->cwd("/pub"); $ftp->get("/ce/repertoire/ce.fichier"); $ftp->quit; # Apres lire le fichier sur le disk local pour avoir le contenu- Par HTTP : en utilisant le package LWP
Une fois installée voir perldoc LWPuse LWP::UserAgent; $ua = new LWP::UserAgent; $ua->agent("AgentName/0.1 " . $ua->agent); # Creation d'une requete my $req = new HTTP::Request POST 'http://www.perl.com/cgi-bin/BugGlimpse'; $req->content_type('application/x-www-form-urlencoded'); $req->content('match=www&errors=0'); # On passe la requete à l'agent et on attend le résultat my $res = $ua->request($req); # Si le resultat est un succes (code HTTP 200) on affiche son contenu if ($res->is_success) {print $res->content;} # Sinon previent que URL defectueuse else {print "Cette URL ne répond pas\n";} - On teste la présence d'un fichier c:\tmp\toto
- Si il existe on attend 2s (sleep(2);)et on reteste. Si il n'existe pas on le cree.
- On fait la modif dans le fichier guest.txt
- On supprime le fichier c:\tmp\toto
Comment envoyer un fichier depuis un formulaire sur le serveur?
Vous devez utiliser un formulaire de ce type :
<form method="POST" ENCTYPE="multipart/form-data" action="...">
<input type="file" name="fichier">
</form>
Puis utilisez la libraire CGI.pm pour récupérer le fichier. Voir un exemple de son utilisation ici.
Et également perldoc CGI
Récupérer diverses infos sur un utilisateur
#!/usr/bin/perl -w
print "Content-type:text/html\n\n";
while(my($n,$v)= each(%ENV)) {print "$n=$v
";}
# Recuperer les infos qui vous
# plaisent de %ENV dans $buf;
my $buf =...
open(MAIL,"|/usr/sbin/sendmail -t");
print MAIL "To: you\@adresse.com\n";
print MAIL "From: you\@adresse.com\n";
print MAIL "Subject: vos donnees\n";
print MAIL "X-Priority: 1 (Highest)\n\n";
print MAIL "Voici vos infos:$buf";
close(MAIL);
ERROR: flock() unimplemented on this platform
Voila le reponse que j'obtiens losque je veux écrire des données dans un fichier texte.
ERROR: flock() unimplemented on this platform at c:/apache/cgi-bin/insert.pl line 23.
Lorsque que je suprime les 2 instructions fock de mon programme tout marche correctement, mais le problème, je crois, c'est que mon fichier txt n'est plus protégé contre l'ecriture pendant son traitement par un autre utilisateur.
Il est vrai que si vous otez les appels à flock le problême disparait puisque le probleme vient de là. Cela sert à verouiller le fichier le temps de son écriture. Le problême vient du fait que flock n'est pas disponible sur les plate-formes Windows ...
Comment faire un programme qui certe ne verrouillera pas sous Windows puisque non dispo mais le fera sur le serveur final qui lui est sous Linux ? (Ou comment faire un code portable ?) En mettant les appels à flock à l'intérieur d'un eval:
eval { flock(FILE,2); };
Comment faire sans ? Ben on peut pas ... sans bricoler. Disons que si le fait qu'il y est un double acces sur le fichier est un gros problême, c'est que la solution d'utiliser un fichier texte sur Windows pour les opérations d'écriture n'est pas la solution ! Soit changer de plateforme, soit utiliser une base de donnée qui va gérer les verrous.
Sinon donc on peut bricoler, mais ce n'est pas conseillé:
C'est du bricolage et ce n'est pas conseillé parce que si le processus est interrompu dans la phase 3, le fichier est vérouillé jusqu'à que qqn supprime manuellement le fichier c:\tmp\toto...