Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème entre CGI et DBI ?

4 réponses
Avatar
Thierry
Bonjour, j'ai un gros problème de CGI incompréhensible (enfin, pour moi):

Dans une page HTML, j'ai un formulaire pour uploader un fichier ainsi qu'un
commentaire.
Ce formulaire appel un script Perl qui récupère le fichier et le
commentaire. Après avoir stocké le fichier (fichier_temp) sur le serveur, le
nom de ce fichier et le commentaire sont répertoriés dans une base MySQL.

Chez moi, sur mon serveur, aucun problème.
Par contre, sur le serveur hébergé, il y a un gros problème que j'ai eu du
mal à comprendre:
Quand la taille du fichier dépasse une certaine limite (env. 1,7Mo), si le
commentaire contient des caractères accentués, ils ne sont pas stockés
correctement dans la base, comme si elle n'était pas configurée en UTF-8
("système" au lieu de "système", par exemple). Alors que si le fichier est
plus petit, aucun de problème.

J'ai essayé d'isoler le problème et c'est dès que la ligne "$query=new CGI;"
est présente qu'il se produit.
Si je supprime toutes les lignes entres "$dbh->do("set names 'utf8'");" et
"$dbh->do(qq{insert into documents (nom, commentaire) values ("$nom",
"$comm")});" et quelque soit la taille du fichier, les accents sont stockés
correctement. Le simple fait d'ajouter la ligne "$query=new CGI;", même sans
les autres, provoque le problème.

Je suis dans la quatrième dimension depuis 2 jours, si vous avez une idée,
n'hésitez surtout pas...

PS: Même si je remplace "$comm" par "système" dans la ligne
"$dbh->do(qq{insert into documents (nom, commentaire) values ("$nom",
"$comm")});", le problème se produit aussi, alors que le fichier upload.pl
est codé en UTF-8.

En résumé:
Partie HTML:

<form action="/cgi-bin/upload.pl" method="post"
enctype="multipart/form-data" accept-charset="utf-8">
<input type="file" name="fichier">
<br>
Commentaire:<input type="text" name="comm">
</form>

--------------------------------------------------------

Partie Perl (script upload.pl):

use CGI;
use DBI;
$dbh=DBI->connect("DBI:mysql:xxxx",'xxxx','xxxx');
$dbh->do("set names 'utf8'");

$query=new CGI;
$nom=$query->param('fichier');
$comm=$query->param('comm');
$upload_filehandle = $query->upload("fichier");
open (UPLOADFILE, ">fichier_temp");
binmode UPLOADFILE;
while (<$upload_filehandle>)
{
print UPLOADFILE;
}
close UPLOADFILE;

$dbh->do(qq{insert into documents (nom, commentaire) values ("$nom",
"$comm")});
$dbh->disconnect;

---------------------------------------------

Les serveurs:

Chez moi:
Apache/2.0.54
Linux Fedora Core 4
mysql Ver 14.7 Distrib 4.1.11, for redhat-linux-gnu (i386)
This is perl, v5.8.6 built for i386-linux-thread-multi

Chez l'hébergeur:
Apache: Server version: Apache/1.3.41 (Unix)
Mysql: Server version: 5.0.51a Source distribution
This is perl, v5.8.8 built for i386-freebsd-64int
FreeBSD 5.5-RELEASE-p20

4 réponses

Avatar
Patrick Texier
Le Tue, 14 Sep 2010 13:28:05 +0200, Thierry a écrit :

Je suis dans la quatrième dimension depuis 2 jours, si vous avez une idée,
n'hésitez surtout pas...



Il semble que vous ne connaissez rien à Perl et sans doute pas grand
chose à la gestion des jeux de caractères dans MySql.

Message d'hier sur fr.comp.lang.perl :
Message-ID: <4c8e16a5$0$5434$
--
Patrick Texier

vim:syntax=mail:ai:ts=4:et:twr
Avatar
Thierry
"Patrick Texier" a écrit dans le message de news:

Le Tue, 14 Sep 2010 13:28:05 +0200, Thierry a écrit :

Je suis dans la quatrième dimension depuis 2 jours, si vous avez une
idée,
n'hésitez surtout pas...



Il semble que vous ne connaissez rien à Perl et sans doute pas grand
chose à la gestion des jeux de caractères dans MySql.

Message d'hier sur fr.comp.lang.perl :
Message-ID: <4c8e16a5$0$5434$
--
Patrick Texier

vim:syntax=mail:ai:ts=4:et:twr



Bonsoir,

Si vous vous permettez de douter de mes « compétences » en programmation,
permettez moi de douter sur vos « compétences » en lecture.



Ok, mes explications ne sont peut-être pas très claires, dans ce cas,
dites-le.



Je ne pense pas qu'il s'agisse dans mon cas d'un problème de gestion de jeux
de caractères puisque mon problème ne se produit pas à chaque fois, mais en
fonction de la taille du fichier transféré. Si c'était un problème de
gestion de caractères, je pense que le problème se produirait à chaque fois.



Maintenant, si vous êtes sûre de vos avances, il serait beaucoup plus
intelligent de donner quelques explications plutôt que de faire ce genre de
réflexion qui ne feront pas avancer le problème.
Avatar
SAM
Le 14/09/10 21:59, Thierry a écrit :
"Patrick Texier" a écrit dans le message de news:

Le Tue, 14 Sep 2010 13:28:05 +0200, Thierry a écrit :

Je suis dans la quatrième dimension depuis 2 jours, si vous avez une
idée,
n'hésitez surtout pas...



Il semble que vous ne connaissez rien à Perl et sans doute pas grand
chose à la gestion des jeux de caractères dans MySql.

Message d'hier sur fr.comp.lang.perl :
Message-ID:<4c8e16a5$0$5434$



Ok, mes explications ne sont peut-être pas très claires, dans ce cas,
dites-le.



Heu ... vu que je n'ai pas accès au "Message d'hier" ...

Si tu nous rappelais de quoi il est question ?
(sans peut-être trop abreuver de code perl et sql ?!)

à quel moment survient le problème ?

Indice pour l'idée de Patrick ?
à ce que je crois, un fichier ne pèse pas le même poids suivant son
encodage.

--
Stéphane Moriaux avec/with iMac-intel
Avatar
Thierry
"SAM" a écrit dans le message
de news: 4c8fe9bf$0$32461$
Le 14/09/10 21:59, Thierry a écrit :
"Patrick Texier" a écrit dans le message de
news:

Le Tue, 14 Sep 2010 13:28:05 +0200, Thierry a écrit :

Je suis dans la quatrième dimension depuis 2 jours, si vous avez une
idée,
n'hésitez surtout pas...



Il semble que vous ne connaissez rien à Perl et sans doute pas grand
chose à la gestion des jeux de caractères dans MySql.

Message d'hier sur fr.comp.lang.perl :
Message-ID:<4c8e16a5$0$5434$



Ok, mes explications ne sont peut-être pas très claires, dans ce cas,
dites-le.



Heu ... vu que je n'ai pas accès au "Message d'hier" ...

Si tu nous rappelais de quoi il est question ?
(sans peut-être trop abreuver de code perl et sql ?!)

à quel moment survient le problème ?

Indice pour l'idée de Patrick ?
à ce que je crois, un fichier ne pèse pas le même poids suivant son
encodage.

--
Stéphane Moriaux avec/with iMac-intel




Bonsoir, voici le "message d'hier", il est un peu long, mais il faut TOUT
lire ;-)

Dans une page HTML, j'ai un formulaire pour uploader un fichier ainsi qu'un
commentaire.
Ce formulaire appel un script Perl qui récupère le fichier et le
commentaire. Après avoir stocké le fichier (fichier_temp) sur le serveur, le
nom de ce fichier et le commentaire sont répertoriés dans une base MySQL.

Chez moi, sur mon serveur, aucun problème.
Par contre, sur le serveur hébergé, il y a un gros problème que j'ai eu du
mal à comprendre:
Quand la taille du fichier dépasse une certaine limite (env. 1,7Mo), si le
commentaire contient des caractères accentués, ils ne sont pas stockés
correctement dans la base, comme si elle n'était pas configurée en UTF-8
("système" au lieu de "système", par exemple). Alors que si le fichier est
plus petit, aucun de problème.

J'ai essayé d'isoler le problème et c'est dès que la ligne "$query=new CGI;"
est présente qu'il se produit.
Si je supprime toutes les lignes entres "$dbh->do("set names 'utf8'");" et
"$dbh->do(qq{insert into documents (nom, commentaire) values ("$nom",
"$comm")});" et quelque soit la taille du fichier, les accents sont stockés
correctement. Le simple fait d'ajouter la ligne "$query=new CGI;", même sans
les autres, provoque le problème.

Je suis dans la quatrième dimension depuis 2 jours, si vous avez une idée,
n'hésitez surtout pas...

PS: Même si je remplace "$comm" par "système" dans la ligne
"$dbh->do(qq{insert into documents (nom, commentaire) values ("$nom",
"$comm")});", le problème se produit aussi, alors que le fichier upload.pl
est codé en UTF-8.

En résumé:
Partie HTML:

<form action="/cgi-bin/upload.pl" method="post"
enctype="multipart/form-data" accept-charset="utf-8">
<input type="file" name="fichier">
<br>
Commentaire:<input type="text" name="comm">
</form>

--------------------------------------------------------

Partie Perl (script upload.pl):

use CGI;
use DBI;
$dbhÛI->connect("DBI:mysql:xxxx",'xxxx','xxxx');
$dbh->do("set names 'utf8'");

$query=new CGI;
$nom=$query->param('fichier');
$comm=$query->param('comm');
$upload_filehandle = $query->upload("fichier");
open (UPLOADFILE, ">fichier_temp");
binmode UPLOADFILE;
while (<$upload_filehandle>)
{
print UPLOADFILE;
}
close UPLOADFILE;

$dbh->do(qq{insert into documents (nom, commentaire) values ("$nom",
"$comm")});
$dbh->disconnect;

---------------------------------------------

Les serveurs:

Chez moi:
Apache/2.0.54
Linux Fedora Core 4
mysql Ver 14.7 Distrib 4.1.11, for redhat-linux-gnu (i386)
This is perl, v5.8.6 built for i386-linux-thread-multi

Chez l'hébergeur:
Apache: Server version: Apache/1.3.41 (Unix)
Mysql: Server version: 5.0.51a Source distribution
This is perl, v5.8.8 built for i386-freebsd-64int
FreeBSD 5.5-RELEASE-p20