Recuperation de documents d'un champ blob
Bonjour bonjour,
Avant toute chose, je préfère prévenir d'avance, je suis loin d'être au point en matière de programmation perl (pourquoi suis-je ici me direz-vous ?), mais il se trouve qu'un collègue a pondu un script nous permettant d'accèder à notre basede données mysql, pour y récupérer des documents dans un champ blob et les extraire.
Tout avait l'air de fonctionner or il se trouve qu'après 3 malheureux documents (des CVs en l'occurence), le script s'arrête sur une erreur : "No such file or directory ./extract.pl line 44"
Bref si vous y voyez plus clair que moi, je suis preneur de toute suggestion :)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
#!/usr/bin/perl
use DBI;
$extract_dir = "/var/cvtheque";
$log_dir = "/var/cvtheque";
my $dbh = DBI->connect('DBI:mysql:mabase', 'monuser', 'monpass') or die "Couldn't connect to database: " . DBI->errstr;
my $sth = $dbh->prepare("SELECT concat(rc.name,' ',replace(rc.surname,',',' ')) candidat,
a.data,
a.origine,
case a.typemime when 'application/pdf' then 'pdf'
when 'text/plainf' then 'txt'
when 'text/html' then 'html'
when 'text/richtext' then 'rtf'
else 'doc' end filetype
FROM (SELECT rc.idrc,rcv.data,rcv.typemime,rcv.origine
FROM rec_candidat rc,
rec_cv rcv,
rec_lien_candidat_cv rl
WHERE rcv.idrcv = rl.idrcv
AND rl.idrc = rc.idrc) a,
(SELECT rc.idrc,max(rcv.origine) max_date
FROM rec_candidat rc,
rec_cv rcv,
rec_lien_candidat_cv rl
WHERE rcv.idrcv = rl.idrcv
AND rl.idrc = rc.idrc
GROUP BY rc.idrc) b,
rec_candidat rc
WHERE a.idrc=b.idrc
AND a.origine=b.max_date
AND a.idrc=rc.idrc") or die "Couldn't prepare statement: " . $dbh->errstr;
$sth->execute;
open(my $lh,'>',$log_dir . "\/extract.log") or die $!;
print $lh "Extraction des CVs de la base MySQL Jems:\n\n";
while (@data = $sth->fetchrow_array()) {
print $lh "$data[0].$data[3]\n";
open(my $fh,'>',$extract_dir . "\/" . $data[0] . "." . $data[3]) or die $!;
binmode $fh;
print $fh $data[1];
close $fh;
}
close $lh;
$sth->finish;
$dbh->disconnect; |
La ligne 44 est donc celle où le script concatène l'array vers un fichier. Après creusage de tête, j'imagine que comme en php, il indique des numéros de position dans l'array, où 0 correspondrait au nom du fichier tiré de la requête, et 3 serait son extension toujours tiré de la requête...
Je ne vois pas ce qui pourrait entrainer le problème puisqu'il commence à écrire dans le répertoire :(
Si vous avez des idées, je vous en remercie par avance !
:aie: