|
|
|
|
Bonjour,
voici mon script
#!/usr/bin/perl -w
use strict;
use DBI;
use CGI;
my $cgi = new CGI;
my $recup = ` sed -e '1,/-\+/d;/^$/,$d' repquota -v/chemin`
my ($user1,$used1,$soft1,$hard1,$grace1,$used2,$soft2,$hard2,$grace2);
print "Content-type: text/html\n\n";
#Connection à la base de données mysql avec le module dbd::mysql (conncetion à distance)
$dbh = DBI->connect("DBI:mysql:database=$db;host=$host",
$user, $password, {RaiseError => 1});
#Requete sur la base de donnée
my $query = sprintf("INSERT INTO foo VALUES (%d, %s)",
$number, $dbh->quote("name"));
$dbh->do($query);
while ($ligne = $recup){
# récupération des éléments
($user1,$used1,$soft1,$hard1,$grace1,$used2,$soft2,$hard2,$grace2) = split /;/,$ligne;
# et on insere dans la base
$db->do("insert into client values ('$user1','$used1','$soft1','$hard1','$grace1','$used2','$soft2','$hard2','$grace2')"
);
or die "pb de requete : $DBI::errstr";
sed -e '1,/-\+/d;/^$/,$d' rep //rep = fichier root -- 157696 0 0 12 0 0 uucp -- 40 0 0 76 0 0 fradin -- 2304352 2500000 2550000 12465 50000 55000
my ($user1,$used1,$soft1,$hard1,$grace1,$used2,$soft2,$hard2,$grace2);
Configuration: Windows XP Firefox 1.5.0.12
Voici le ce qui ce passe quand je fait un pepquota -v (exemple de fichier) :
eport for user quotas on device /dev/mapper/data-sitcar Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 157696 0 0 12 0 0 uucp -- 40 0 0 76 0 0 fradin -- 2304352 2500000 2550000 12465 50000 55000 Statistics: Total blocks: 7 Data blocks: 1 Entries: 3 Used average: 3.000000 ensuite voici ce qui ce passe quand je fait : sed -e '1,/-\+/d;/^$/,$d' rep //rep = fichier root -- 157696 0 0 12 0 0 uucp -- 40 0 0 76 0 0 fradin -- 2304352 2500000 2550000 12465 50000 55000 L'objectif de mon code (que je metterai en cron plus tard ) est de nourrir une base de donnée distante ( donc de lui donnée toute les infos de repquota) Il faut que je mette toute ces donnée en variable puis je les balance a la table distante . Une fois que tout cela sera terminé je ferai un script php qui donnera dans une sorte d'intranet les quotas disque utilisé puis ... . Voila a tu compris mon objectif ? Maintenant il est vrai j'ai quelque soucis dans mon code mais en tant que debutatn et surtout premier script voila je demande de l'aide en tout cas merci a toi Sinon voici se qu'une autre personne ma conseillé quand pense tu ? Il ma mis en commentaire les lignes d'origine Code : #!/usr/bin/perl -w
use strict;
use DBI;
use CGI;
my $cgi = new CGI;
#my $recup = ` sed -e '1,/-\+/d;/^$/,$d' repquota -v/chemin`
my @recup = ` sed -e '1,/-\+/d;/^$/,$d' repquota -v/chemin`;
chomp(@recup);
my ($user1,$used1,$soft1,$hard1,$grace1,$used2,$soft2,$hard2,$grace2);
print "Content-type: text/html\n\n";
#Connection à la base de données mysql avec le module dbd::mysql (conncetion à distance)
$dbh = DBI->connect("DBI:mysql:database=$db;host=$host",
$user, $password, {RaiseError => 1});
#Requete sur la base de donnée
my $query = sprintf("INSERT INTO foo VALUES (%d, %s)",
$number, $dbh->quote("name"));
$dbh->do($query);
#while ($ligne = $recup){
foreach($ligne(@recup)) {
# récupération des éléments
# ($user1,$used1,$soft1,$hard1,$grace1,$used2,$soft2,$hard2,$grace2) = split /;/,$ligne;
($user1,$used1,$soft1,$hard1,$grace1,$used2,$soft2,$hard2,$grace2) = split / +/,$ligne;
# et on insere dans la base
$db->do("insert into client values ('$user1','$used1','$soft1','$hard1','$grace1','$used2','$soft2','$hard2','$grace2')"
);
or die "pb de requete : $DBI::errstr";
Voiloilou!!!! |
Effectivement ca boucle, mais non pas indéfiniement, mais infiniement ;)
while ($ligne = $recup){
Il n'y a pas de condition d'arrêt puisque $ligne = $recup n'est pas une condition, mais une attribution. Dans ce type de cas, généralement on fais un truc du genre :
while ( ($ligne = $recup) != null ){
// --- code
}
Affectation + test en même temps. Regarde si tu ne peux pas faire un truc du même genre (condition sur la nullité de ta ligne) ~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~ |
Salut,
#!/usr/bin/perl
use strict;use warnings;
use DBI;
use CGI;
use Quota;
my $cgi = new CGI;
print "Content-type: text/html\n\n";
#Connection à la base de données mysql avec le module dbd::mysql (conncetion à distance)
$dbh = DBI->connect("DBI:mysql:database=$db;host=$host",
$user, $password, {RaiseError => 1});
#Requete sur la base de donnée
my $query = sprintf("INSERT INTO foo VALUES (%d, %s)",
$number, $dbh->quote("name"));
$dbh->do($query);
my $dev = Quota::getdev('/home'); # à modifier avec ton chemin
while(my ($nom,$uid) = (getpwent())[0,2]){
my @tmp = Quota::query($dev,$uid);
if (eval(join '+',@tmp) > 0){
my($u1,$s1,$h1,$g1,$u2,$s2,$h2,$g2) = map { $dbh->quote($_) } @tmp;
print "$nom : $u1,$s1,$h1,$g1,$u2,$s2,$h2,$g2\n"; # seulement pour test
$db->do("insert into client values ($nom,$u1,$s1,$h1,$g1,$u2,$s2,$h2,$g2)");
or die "pb de requete : $DBI::errstr";
}
}je vais tester plus tard, mais normalement ça doit fonctionner
lami20j |
Re,
#!/usr/bin/perl
use strict;use warnings;
use DBI;
use Quota;
my $base = 'aaa';
my $host = 'localhost';
my $user = 'root';
my $pass = 'aaaaaaaa';
my $mysql_sock = '/var/run/mysqld/mysqld.sock';
#Connection à base de donnée mysql
my $db = DBI->connect("DBI:mysql:database=$base;host=$host;mysql_socket=$mysql_sock",
$user, $pass, {RaiseError => 1});
my $dev = Quota::getdev('/'); # à modifier avec ton chemin
while(my ($nom,$uid) = (getpwent())[0,2]){
my @tmp = Quota::query($dev,$uid);
if (eval(join '+',@tmp) > 0){
my($u1,$s1,$h1,$g1,$u2,$s2,$h2,$g2) = map {$db->quote($_)} @tmp;
my $nom_ = $db->quote($nom);
$db->do("INSERT INTO quota
(utilisateur,u1,s1,h1,g1,u2,s2,h2,g2) VALUES (
$nom_,
$u1,
$s1,
$h1,
$g1,
$u2,
$s2,
$h2,
$g2)
")
or die "pb de requete : $DBI::errstr";
}
}
__END__--
lami20j |
Oui tu peux chercher sur cpan
#!/usr/bin/perl
use strict;use warnings;
use DBI;
use Quota;
my $base = 'aaa';
my $host = 'localhost';
my $user = 'root';
my $pass = 'aaaaaaaa';
my $mysql_sock = '/var/run/mysqld/mysqld.sock';
#Connection à la base de données
my $db = DBI->connect("DBI:mysql:database=$base;
host=$host;
mysql_socket=$mysql_sock",
$user,
$pass,
{RaiseError => 1}
);
my $dev = Quota::getdev('/'); # à modifier avec ton chemin
while(my ($nom,$uid) = (getpwent())[0,2]){
my @tmp = Quota::query($dev,$uid);
if (eval(join '+',@tmp) > 0){
my($u1,$s1,$h1,$g1,$u2,$s2,$h2,$g2) = map {$db->quote($_)} @tmp;
my $nom_ = $db->quote($nom);
# insertion dans la base de données
$db->do("INSERT INTO quota
(utilisateur,u1,s1,h1,g1,u2,s2,h2,g2) VALUES (
$nom_,
$u1,
$s1,
$h1,
$g1,
$u2,
$s2,
$h2,
$g2)
")
or die "pb de requete : $DBI::errstr";
}
}
__END__
lami20j |
#!/usr/bin/perl
use strict;use warnings;
use DBI;
use Quota;
my $base = 'aaa';
my $host = 'localhost';
my $user = 'root';
my $pass = 'aaaaaaaa';
my $mysql_sock = '/var/run/mysqld/mysqld.sock';
#Connection à la base de données
my $db = DBI->connect("DBI:mysql:database=$base;
host=$host;
mysql_socket=$mysql_sock",
$user,
$pass,
{RaiseError => 1}
);
Cette partie oki my $dev = Quota::getdev('/'); # à modifier avec ton chemin
La je ne voit pas trop c'est pour le chemin de koi
# la c'est pour ...
while(my ($nom,$uid) = (getpwent())[0,2]){
my @tmp = Quota::query($dev,$uid);
if (eval(join '+',@tmp) > 0){
my($u1,$s1,$h1,$g1,$u2,$s2,$h2,$g2) = map {$db->quote($_)} @tmp;
my $nom_ = $db->quote($nom);
# insertion dans la base de données ok
$db->do("INSERT INTO quota ok
(utilisateur,u1,s1,h1,g1,u2,s2,h2,g2) VALUES ( ok
$nom_, ok
$u1, ok
$s1, ok
$h1, ok
$g1, ok
$u2, ok
$s2, ok
$h2, ok
$g2) ok
") ok
or die "pb de requete : $DBI::errstr"; ok
} ok
} ok
__END__ ok
je test merci |
my $dev = Quota::getdev('/'); # à modifier avec ton chemin
|
Regarde ici http://search.cpan.org/dist/Quota/Quota.pm
|