zulrigh
Messages postés24Date d'inscriptionsamedi 10 janvier 2009StatutMembreDernière intervention 7 juin 2014 26 juil. 2010 à 22:53
tres simpa comme code !!! Merci !
skyg
Messages postés1Date d'inscriptionvendredi 1 décembre 2006StatutMembreDernière intervention29 avril 2008 29 avril 2008 à 14:14
Je ne trouve pas que que c'est une bonne idée de séparé le type d'unité et les unités.
Cette fonction marche pas mal du tout et rendra quelque chose d'exact.
Et comment faire pour calculer le poids de toutes les bases de données appartenant à un seul utilisateur ?
cs_LysBleu
Messages postés1Date d'inscriptionsamedi 26 février 2005StatutMembreDernière intervention28 septembre 2007 28 sept. 2007 à 21:42
rÉponse ;a
------------------------
query="SELECT COUNT(*) FROM MA_TABLE";
mon problème est comment mettre le resultat de cette requete dans une variable entière pour que je puisse l'utiliser dans une boucle for.
je veux la reponse le plus vite possible
et merci d'avance
--------------------------------
$query = "SELECT COUNT(*) as total FROM MA_TABLE";
$res = mysql_query( $query )
$row = mysql_fetch_object( $res )
$total = $row->total;
cs_frop01
Messages postés1352Date d'inscriptionlundi 27 octobre 2003StatutMembreDernière intervention19 novembre 20082 10 sept. 2006 à 02:05
Salut,
Une petite modification s'impose au niveau de la fonction file_size_info :
function file_size_info($filesize)
{
$bytes = array('Octets', 'Ko', 'Mo', 'Go', 'To');
print "Taille de la base de données : {$dbSizeKo['size']} {$dbSizeKo['type']} et {$dbSizeKo['deci']} {$dbSizeKo['type2']} ($dbSize octets)
";
J'espère que c'est le résultat que tu cherches.
Bonne continuation.
cs_christobal
Messages postés208Date d'inscriptionjeudi 3 octobre 2002StatutMembreDernière intervention31 mars 2011 9 sept. 2006 à 20:39
bonjour et merci pour ce code que j'utilise depuis qq temps deja.
le poids de ma base évoluent j'aimerais avoir une affichage clair et préci de sa taile.
Aujourd'hui la taile ce fait en Mo, mais qu'elle face 1025 ou 2047 il affiche tj 2Mo.
J'aimerais qq chose du type 1.41 Mo ou 1Mo et 258 Ko.
Merci de votre aide
ilhembilto
Messages postés2Date d'inscriptiondimanche 21 mai 2006StatutMembreDernière intervention20 juin 2006 20 juin 2006 à 11:25
bjr!
je veux determiner le nombre d'enregistrement de ma table mysql en utilisant java.
j'ai utilisé la requete suivante:
query="SELECT COUNT(*) FROM MA_TABLE";
mon problème est comment mettre le resultat de cette requete dans une variable entière pour que je puisse l'utiliser dans une boucle for.
je veux la reponse le plus vite possible
et merci d'avance
Missions_courtes
Messages postés8Date d'inscriptionvendredi 30 avril 2004StatutMembreDernière intervention13 février 2006 16 mars 2005 à 18:44
Bonjour,
Voici ci-dessous un calcul pour déterminer la taille d'une base de données et le nombre total d'enregistrements
NewSky
Messages postés86Date d'inscriptiondimanche 27 janvier 2002StatutMembreDernière intervention20 février 2009 16 mars 2005 à 14:04
Oui, en effet. Mais c'est exactement ce que je cherchais à faire (cf mon avant-avant dernier commentaire du 15/03).
Ton code est très certainement utile mais pas dans mon cas.
Merci beaucoup pour tout ton aide.
@+
cs_frop01
Messages postés1352Date d'inscriptionlundi 27 octobre 2003StatutMembreDernière intervention19 novembre 20082 16 mars 2005 à 12:31
salut,
le code que tu as mentionné extrait le nombre d'enregistrements d'une seule table alors que mon code a pour but d'extraire le nombre d'enregistrements d'une base de données entières (plusieurs tables)
@+
NewSky
Messages postés86Date d'inscriptiondimanche 27 janvier 2002StatutMembreDernière intervention20 février 2009 16 mars 2005 à 12:25
En cherchant un peu sur le web, g glané quelques codes dont celui-là:
apparement, ça fonctionne bien. Vaut-il mieu utiliser ton code à toi ou celui là ne pose aucun problème?
En tout cas merci de m'avoir aider.
cs_frop01
Messages postés1352Date d'inscriptionlundi 27 octobre 2003StatutMembreDernière intervention19 novembre 20082 16 mars 2005 à 11:44
n'oublis pas de changer :
$db_user = 'root'; // nom de l'utilisateur de la base
$db_pwd = 'pwd'; // Mot de passe
$db_name = 'bdd'; // nom de la base de données
cs_frop01
Messages postés1352Date d'inscriptionlundi 27 octobre 2003StatutMembreDernière intervention19 novembre 20082 16 mars 2005 à 11:40
<html>
<head>
<title>Taille Base de données MySQL</title>
</head>
<?php
$db_server = 'localhost';
$db_user = 'root';
$db_pwd = 'pwd';
$db_name = 'bdd';
$db_link = mysql_connect($db_server, $db_user, $db_pwd) or exit('Could not connect: ' . mysql_error());
$db = mysql_select_db($db_name, $db_link) or exit('Could not select database: ' . mysql_error());
// Déterminer le nombre d'enregistrements et la taille de la base de données en additionnant la taille de la table + la taille de l'index :
$rows = mysql_query("SHOW TABLE STATUS");
$dbrows = 0;
while ($row = mysql_fetch_array($rows))
{
$dbrows += $row['Rows'];
}
print "Nombre d'enregistrements : $dbrows enregistrements
";
?>
</html>
NewSky
Messages postés86Date d'inscriptiondimanche 27 janvier 2002StatutMembreDernière intervention20 février 2009 15 mars 2005 à 13:25
Bonjour,
ton code m'interresse mais j'aimerai uniquement compter le nombre d'enregistrements et dans une table et non pas dans la base entière. Je suis débutant, quelqu'un pourrait m'aide svp.
Merci
Missions_courtes
Messages postés8Date d'inscriptionvendredi 30 avril 2004StatutMembreDernière intervention13 février 2006 1 déc. 2004 à 00:24
Bonjour hohorga,
Merci pour ta remarque for judicieuse : bien sur il faut mettre le " return $file_size_info;" après la boucle du FOR.
Mais après essai, pour une valeur initiale de 9404572 octets, return "$file_size_info" placé :
- dans la boucle du FOR : 9185 Ko,
- après la boucle du FOR : 9 Mo.
Les deux résultats sont justes.
Ceci dit si l'on souhaite : 9 Mo 185 Ko, il faudra revoir le code.
Cordialement
Michel FOUILLADE
hohorga
Messages postés4Date d'inscriptionsamedi 30 octobre 2004StatutMembreDernière intervention30 novembre 2004 30 nov. 2004 à 23:45
Bonsoir Missions_courtes,
Je viens de tester ton code et il fonctionne.
Avec le code de JulioDelphi il y a bien une erreur et mes 33813 octets mon php 4.3.3 m'affiche bien 33MO ! C'est peut-être notre ami qui a mal corrigé (ou alors c'est que le code en haut de page http://www.phpcs.com/code.aspx?id=27761#code ne répercute pas les modifs et dans ce cas où le trouver ? (je rappelle je suis nouveau ici) ).
Sinon Missions_courtes je trouve un truc étrange à ton code : le return n'est-t-il pas mal placé ?
function file_size_info($filesize)
{
$bytes = array('Octets', 'Ko', 'Mo', 'Go', 'To');
if ($filesize < 1024) $filesize = 1;
for ($i = 1; $filesize > 1024; $i++)
{
$filesize /= 1024;
$file_size_info['size'] = ceil($filesize);
$file_size_info['type'] = $bytes[$i];
return $file_size_info; ///// pourquoi ici et pas aprés la fin de boucle ???
}
}
Si je lis bien ton code la boucle tourne 1 seule fois puis retourne à l'appellant avec le return.
Je l'aurai vu plutôt comme ça (mais bon je n'utilise le php que pour les loisirs par pour le boulot, je ne suis donc pas expert dedans, donc ma correction viens peut-être de mon habitude du C) :
function file_size_info($filesize)
{
$bytes = array('Octets', 'Ko', 'Mo', 'Go', 'To');
Missions_courtes
Messages postés8Date d'inscriptionvendredi 30 avril 2004StatutMembreDernière intervention13 février 2006 30 nov. 2004 à 21:10
Bonjour Hohorga,
Je ne voudrais pas avoir l'air de polémiquer, mais compte tenu de ce que dans ton exemple :
- dans la première boucle du for : $i = 0,
- la taille $filesize est divisé par 1024 (on a donc des ko),
- $bytes[$i] vaut "Octets" (pour $i = 0).
Alors que l'on devrait obtenir : $bytes[$i] vaut "Ko" .
Personnellement, j'aurai tendance à conserver :
" for ($i = 1; $filesize > 1024; $i++) "
C'est ce que j'ai "cablé sur mon site" et le résultat est correct.
Cordialement
Michel FOUILLADE
hohorga
Messages postés4Date d'inscriptionsamedi 30 octobre 2004StatutMembreDernière intervention30 novembre 2004 30 nov. 2004 à 21:01
Une autre remarque mais pas sur ton code.
La taille calculée est celle des données pas la taille physique sur le(s) disque(s) dur(s). Ca peut avoir de l'intérêt si un hébergeur limite la taille, ou si c'est facturé.
Il serait donc intéressant (si c'est possible avec mysql) d'ajouter le calcul de la taille des indexes pour avoir une vue plus pointue de l'occupation physique.
La taille des indexes peut avoir une grosse importance car je connais des admin sous Oracle qui considèrent qu'une base qu'une base commence à être bien optimiosée si, entre autre, la taille des indexes est égale à environ 50% de la taille des indexes.
hohorga
Messages postés4Date d'inscriptionsamedi 30 octobre 2004StatutMembreDernière intervention30 novembre 2004 30 nov. 2004 à 20:52
(Nouveau sur le site et je fait ma 1ère gaffe car plongé dans une erreur sur ton code : j'ai validé un post vide... Désolé !)
Sinon j'ai vu une erreur en testant sur une base quasi vide :
Taille de la base de données : 33 Mo (33521 octets)
Nombre d'enregistrements : 17 enregistrements
En fait dans $bytes = array('Octets', 'Ko', 'Mo', 'Go', 'To'); l'index du tableau commence à zéro mais tu ne semble pas en avoir tenu compte.
Or ta boucle commence à l'index 1 :
for ($i = 1; $filesize > 1024; $i++)
$filesize /= 1024;
Le résultat est donc décalé (des KO sont affichés comme des MO)...
Je te recommande donc :
function file_size_info($filesize)
{
$bytes = array('Octets', 'Ko', 'Mo', 'Go', 'To');
26 juil. 2010 à 22:53
29 avril 2008 à 14:14
Cette fonction marche pas mal du tout et rendra quelque chose d'exact.
function size_readable($size, $retstring = null)
{
$sizes = array('o', 'Ko', 'Mo', 'Go', 'To', 'Po', 'Eo', 'Zo', 'Yo'); if ($retstring null) { $retstring '%01.2f %s'; }
$lastsizestring = end($sizes);
foreach ($sizes as $sizestring)
{
if ($size < 1024) { break; }
if ($sizestring != $lastsizestring) { $size /= 1024; }
}
if ($sizestring $sizes[0]) { $retstring '%01d %s'; } // Bytes ne sont pas fractionnaire normalement ...
return sprintf($retstring, $size, $sizestring);
}
Du coup, le code devient :
$rows = mysql_query("SHOW TABLE STATUS");
$dbSize = 0;
$dbrows = 0;
while ($row = mysql_fetch_array($rows))
{
$dbSize += $row['Data_length'] + $row['Index_length'];
$dbrows += $row['Rows'];
}
echo 'Taille de la base de données : '.size_readable($dbSize).' ('.$dbSize.' octets)
';
echo 'Nombre d\'enregistrements : '.$dbrows.' enregistrements
';
Cdt.
Sky
9 janv. 2008 à 10:51
28 sept. 2007 à 21:42
------------------------
query="SELECT COUNT(*) FROM MA_TABLE";
mon problème est comment mettre le resultat de cette requete dans une variable entière pour que je puisse l'utiliser dans une boucle for.
je veux la reponse le plus vite possible
et merci d'avance
--------------------------------
$query = "SELECT COUNT(*) as total FROM MA_TABLE";
$res = mysql_query( $query )
$row = mysql_fetch_object( $res )
$total = $row->total;
10 sept. 2006 à 02:05
Une petite modification s'impose au niveau de la fonction file_size_info :
function file_size_info($filesize)
{
$bytes = array('Octets', 'Ko', 'Mo', 'Go', 'To');
if ($filesize < 1024) $filesize = 1;
for ($i = 0; $filesize > 1024; $i++)
$filesize /= 1024;
$file_size_info['size'] = floor($filesize);
$file_size_info['deci'] = ceil(($filesize*1000)-(floor($filesize)*1000));
$file_size_info['type'] = $bytes[$i];
$file_size_info['type2'] = $bytes[$i-1];
return $file_size_info;
}
et pour l'affichage :
print "Taille de la base de données : {$dbSizeKo['size']} {$dbSizeKo['type']} et {$dbSizeKo['deci']} {$dbSizeKo['type2']} ($dbSize octets)
";
J'espère que c'est le résultat que tu cherches.
Bonne continuation.
9 sept. 2006 à 20:39
le poids de ma base évoluent j'aimerais avoir une affichage clair et préci de sa taile.
Aujourd'hui la taile ce fait en Mo, mais qu'elle face 1025 ou 2047 il affiche tj 2Mo.
J'aimerais qq chose du type 1.41 Mo ou 1Mo et 258 Ko.
Merci de votre aide
20 juin 2006 à 11:25
je veux determiner le nombre d'enregistrement de ma table mysql en utilisant java.
j'ai utilisé la requete suivante:
query="SELECT COUNT(*) FROM MA_TABLE";
mon problème est comment mettre le resultat de cette requete dans une variable entière pour que je puisse l'utiliser dans une boucle for.
je veux la reponse le plus vite possible
et merci d'avance
16 mars 2005 à 18:44
Voici ci-dessous un calcul pour déterminer la taille d'une base de données et le nombre total d'enregistrements
$rows = mysql_query("SHOW TABLE STATUS");
$dbSize = 0;
$dbrows = 0;
$Aff_screen .= "<table cellpadding=0 cellspacing=0 border=$Border class=td10> \n";
while ($row = mysql_fetch_array($rows))
{
$dbSize += $row['Data_length'] + $row['Index_length'];
$dbrows += $row['Rows'];
$Name = $row['Name'];
$Type = $row['Type'];
$Data_length = $row['Data_length'];
$Index_length = $row['Index_length'];
$nblignes = $row['Rows'];
$Create_time = $row['Create_time'];
$Update_time = $row['Update_time'];
if ( 1 == 2)
{
$Aff_screen .= "<tr> \n";
$Aff_screen .= "<td> DB </td>\n";
$Aff_screen . = "<td>   $dbSize </td>\n";
$Aff_screen .= "<td>     \$Name= $Name </td>\n";
$Aff_screen . = "<td>     \$Data_length= $Data_length </td>\n";
$Aff_screen . = "<td>     \$Index_length= $Index_length </td>\n";
$Aff_screen . = "<td>     \$nblignes= $nblignes </td>\n";
$Aff_screen . = "</tr> \n";
}
}
DB_Close ();
$dbSizeKo = file_size_info($dbSize);
$espace_db_Ko = $dbSizeKo['size'];
$espace_db_Ko = sprintf("%01.3f", $espace_db_Ko);
$espace_db_Mo = $espace_db_Ko / 1000 ;
$dbrows = $dbrows;
Cordialement.
Michel
16 mars 2005 à 14:04
Ton code est très certainement utile mais pas dans mon cas.
Merci beaucoup pour tout ton aide.
@+
16 mars 2005 à 12:31
le code que tu as mentionné extrait le nombre d'enregistrements d'une seule table alors que mon code a pour but d'extraire le nombre d'enregistrements d'une base de données entières (plusieurs tables)
@+
16 mars 2005 à 12:25
//une fois connecté à la BDD :
$requete = mysql_query("select $nom_d'une colonne quelconque from $nom_de_la_table");
$nbr_user = mysql_numrows($requete);
apparement, ça fonctionne bien. Vaut-il mieu utiliser ton code à toi ou celui là ne pose aucun problème?
En tout cas merci de m'avoir aider.
16 mars 2005 à 11:44
$db_user = 'root'; // nom de l'utilisateur de la base
$db_pwd = 'pwd'; // Mot de passe
$db_name = 'bdd'; // nom de la base de données
16 mars 2005 à 11:40
15 mars 2005 à 13:25
ton code m'interresse mais j'aimerai uniquement compter le nombre d'enregistrements et dans une table et non pas dans la base entière. Je suis débutant, quelqu'un pourrait m'aide svp.
Merci
1 déc. 2004 à 00:24
Merci pour ta remarque for judicieuse : bien sur il faut mettre le " return $file_size_info;" après la boucle du FOR.
Mais après essai, pour une valeur initiale de 9404572 octets, return "$file_size_info" placé :
- dans la boucle du FOR : 9185 Ko,
- après la boucle du FOR : 9 Mo.
Les deux résultats sont justes.
Ceci dit si l'on souhaite : 9 Mo 185 Ko, il faudra revoir le code.
Cordialement
Michel FOUILLADE
30 nov. 2004 à 23:45
Je viens de tester ton code et il fonctionne.
Avec le code de JulioDelphi il y a bien une erreur et mes 33813 octets mon php 4.3.3 m'affiche bien 33MO ! C'est peut-être notre ami qui a mal corrigé (ou alors c'est que le code en haut de page http://www.phpcs.com/code.aspx?id=27761#code ne répercute pas les modifs et dans ce cas où le trouver ? (je rappelle je suis nouveau ici) ).
Sinon Missions_courtes je trouve un truc étrange à ton code : le return n'est-t-il pas mal placé ?
function file_size_info($filesize)
{
$bytes = array('Octets', 'Ko', 'Mo', 'Go', 'To');
if ($filesize < 1024) $filesize = 1;
for ($i = 1; $filesize > 1024; $i++)
{
$filesize /= 1024;
$file_size_info['size'] = ceil($filesize);
$file_size_info['type'] = $bytes[$i];
return $file_size_info; ///// pourquoi ici et pas aprés la fin de boucle ???
}
}
Si je lis bien ton code la boucle tourne 1 seule fois puis retourne à l'appellant avec le return.
Je l'aurai vu plutôt comme ça (mais bon je n'utilise le php que pour les loisirs par pour le boulot, je ne suis donc pas expert dedans, donc ma correction viens peut-être de mon habitude du C) :
function file_size_info($filesize)
{
$bytes = array('Octets', 'Ko', 'Mo', 'Go', 'To');
if ($filesize < 1024) $filesize = 1;
for ($i = 1; $filesize > 1024; $i++)
{
$filesize /= 1024;
$file_size_info['size'] = ceil($filesize);
$file_size_info['type'] = $bytes[$i];
}
return $file_size_info;
}
Bonsoir.
30 nov. 2004 à 21:10
Je ne voudrais pas avoir l'air de polémiquer, mais compte tenu de ce que dans ton exemple :
- dans la première boucle du for : $i = 0,
- la taille $filesize est divisé par 1024 (on a donc des ko),
- $bytes[$i] vaut "Octets" (pour $i = 0).
Alors que l'on devrait obtenir : $bytes[$i] vaut "Ko" .
Personnellement, j'aurai tendance à conserver :
" for ($i = 1; $filesize > 1024; $i++) "
C'est ce que j'ai "cablé sur mon site" et le résultat est correct.
Cordialement
Michel FOUILLADE
30 nov. 2004 à 21:01
La taille calculée est celle des données pas la taille physique sur le(s) disque(s) dur(s). Ca peut avoir de l'intérêt si un hébergeur limite la taille, ou si c'est facturé.
Il serait donc intéressant (si c'est possible avec mysql) d'ajouter le calcul de la taille des indexes pour avoir une vue plus pointue de l'occupation physique.
La taille des indexes peut avoir une grosse importance car je connais des admin sous Oracle qui considèrent qu'une base qu'une base commence à être bien optimiosée si, entre autre, la taille des indexes est égale à environ 50% de la taille des indexes.
30 nov. 2004 à 20:52
Sinon j'ai vu une erreur en testant sur une base quasi vide :
Taille de la base de données : 33 Mo (33521 octets)
Nombre d'enregistrements : 17 enregistrements
En fait dans $bytes = array('Octets', 'Ko', 'Mo', 'Go', 'To'); l'index du tableau commence à zéro mais tu ne semble pas en avoir tenu compte.
Or ta boucle commence à l'index 1 :
for ($i = 1; $filesize > 1024; $i++)
$filesize /= 1024;
Le résultat est donc décalé (des KO sont affichés comme des MO)...
Je te recommande donc :
function file_size_info($filesize)
{
$bytes = array('Octets', 'Ko', 'Mo', 'Go', 'To');
if ($filesize < 1024) $filesize = 1;
for ($i = 0; $filesize > 1024; $i++)
$filesize /= 1024;
$file_size_info['size'] = ceil($filesize);
$file_size_info['type'] = $bytes[$i];
return $file_size_info;
}
Voilà j'espère que ça fonctionnera mieux.
Et merci je vais utiliser ton code !
30 nov. 2004 à 20:45
29 nov. 2004 à 11:20
Effectivement, 1 Ko = 1024 octets ( de 0 à 1023 ou de 1 à 1024). Et aussi la première valeur du tabelau est l'octet et non pas Kbits .
Trés observateur Missions_courtes ! Merci bcp.
29 nov. 2004 à 10:51
Tous d'abord pour ton outil : c'est super.
J'ai trouvé deux petites erreurs minimes :
Remplacer : $bytes = array('Kbit', 'Ko', 'Mo', 'Go', 'To');
Par : $bytes = array('Octets', 'Ko', 'Mo', 'Go', 'To');
Remplacer : for ($i = 0; $filesize > 1024; $i++)
Par : for ($i = 1; $filesize > 1024; $i++)
Ce qui donne pour la fonction " file_size_info " :
function file_size_info($filesize)
{
$bytes = array('Octets', 'Ko', 'Mo', 'Go', 'To');
if ($filesize < 1024) $filesize = 1;
for ($i = 1; $filesize > 1024; $i++)
{
$filesize /= 1024;
$file_size_info['size'] = ceil($filesize);
$file_size_info['type'] = $bytes[$i];
return $file_size_info;
}
}
Je viens d'intégrer ton outil à mon menu d'administration de mon site.
Avec mes remerciements frop01.
Cordialement
Michel FOUILLADE
23 nov. 2004 à 14:07
23 nov. 2004 à 13:02
bon codage :D
23 nov. 2004 à 12:57
Si on mets cette boucle, on aura la liste des tables avec la taille des tables et non pas la taille de la base de données (somme des tailles).
Mais bon, avec la requête SHOW on peut toujours tiré plusieurs informations comme les tailles des pertes avec la somme du champ Data_free .
Merci ;)
23 nov. 2004 à 12:37
while ($row = mysql_fetch_array($rows)) {
$dbSize += $row['Data_length'] + $row['Index_length'];
print 'Table: ' . $row['Name'] . '
';
print 'Database size. . .: ' . $row['Data_length'] . '
';
print 'Index Size . . . .: ' . $row['Index_length'] . '
';
print 'Total size . . . .: ' . ($row['Data_length'] + $row['Index_length']) . '
';
}
ps : tiré de la meme url