Voici le script Perl à placer dans /home/httpd/cgi-bin/testDBI.pl
# cd /home/httpd/cgi-bin
# vim testDBI.pl
#!/usr/bin/perl
use DBI;
use CGI;
$html = new CGI;
$prenom = $html->param('prenom');
print $html->header;
print "<HTML>\n";
print "<HEAD>\n";
print "<TITLE>Resultat d'interrogation de la base</TITLE>\n";
print "</HEAD>\n";
print "<BODY>\n";
print "<PRE>\n";
$date = `/bin/date '+%X'`;
$dbh = DBI->connect("dbi:Pg:dbname=personnedb", postgres, ) or die $DBI::errstr;
$cursor = $dbh->prepare( "SELECT * FROM copain WHERE prenom LIKE '$prenom'" );
$cursor->execute;
while ( @row = $cursor->fetchrow ) {
print "Field : @row\n";
}
$cursor->finish;
$dbh->disconnect;
$date1 = `/bin/date '+%X'`;
print "\nHeure de debut : $date\nHeure de fin : $date1\n";
print "</PRE>\n";
print "</BODY>\n";
print "</HTML>\n";
exit;
# chmod 755 testDBI.pl
Et voici la page html à mettre dans l'arborescence de votre serveur (/home/httpd/html)
# cd ../html
# vim testDBI.html
<HTML>
<HEAD>
<TITLE>Exemple de page pour l'interrogation de PostgresSQL</TITLE>
</HEAD>
<BODY>
<P>
Entrez le Prenom recherche
<P>
<FORM ACTION="/cgi-bin/testDBI.pl" METHOD="POST">
<INPUT TYPE="text" NAME="prenom">
<P>
<INPUT TYPE=submit VALUE="Envoyer au CGI">
<INPUT TYPE=reset VALUE="Annuler">
</FORM>
<P>
</BODY>
</HTML>
#
Le fait de lancer testDBI.pl directement sur la ligne de commande induit
qu'il nous demande de saisir les couples variable=valeur
. Il faut
faire "Entrée" entre chaque couple et finir la saisie par CTRL-D
.
Ensuite, il doit vous produire la liste des enregistrements correspondants
à votre requête.
# ./testDBI.pl
(offline mode: enter name=value pairs on standard input)
prenom=FABRICE
Content-type: text/html
<HTML>
<HEAD>
<TITLE>Resultat d'interrogation de la base</TITLE>
</HEAD>
<BODY>
<PRE>
Field : FABRICE ORLY 01-08-1973
Heure de debut : 12:26:28
Heure de fin : 12:26:28
</PRE>
</BODY>
</HTML>
#
Si vous obtenez ceci, le script perl et les modules DBI et DBD sont bien installés. Reste à faire fonctionner le tout sous un navigateur mais cela ne devrait pas poser de problème :
# lynx http://localhost/cgi-bin/testDBI.pl?prenom=FABRICE
Le même résultat devrait apparaître sous lynx. et enfin :
# lynx http://localhost/testDBI.html
Vous saisissez les données dans le formulaire, cliquez sur le bouton et admirez.
En cas de problème commencer par examiner les logs d'Apache (/var/log/httpd/error_log ou /usr/local/apache/var/log/error_log)), chercher les messages d'erreur nécessaires. Ensuite, si le problème persiste, vérifier les logiciels un par un. A priori, PostgresSQL fonctionne bien si vous avez pu créer la base, la table et la remplir; pour Apache, il faut vérifier que vous pouvez bien exécuter les scripts CGI sur le serveur (c'est la configuration par défaut d'Apache dans l'installation de la RedHat 5.0).
J'ai fait un test chez moi sur un P75, 40Mo de RAM, disque IDE, sous X ... bon vous voyez quoi !!!
J'ai créé une table de 3 champs et de 32.515 enregistrements. En faisant une requête avec un critères sur les trois champs (en fait, plus que cela puis que sur 2 des 3 champs, le critères était un interval : Pour la taille > 10000 et < 15000, pour l'heure > 00:00 et < 05:00 et pour le nom %A%). Juste après un shutdown, il a fallut 5 secondes pour afficher les 3 champs correspondant, puis sur la même requête, 3 secondes