8797 sujets

Développement web côté serveur, CMS

Salut à tous,

Je dois réaliser un graphique sur l'évolution des file system de notre serveur et pour cela je dispose d'un fichier .csv par nom de FS.

Je dois créer un graphique de type ligne (plusieurs points reliés entre eux) donc avec la bibliothèque GD.

Le contenu du fichier appli.csv :
20081203,05:12, 1%, 274829
20081203,06:12, 2%, 274829
20081203,07:12, 3%, 274829
20081203,08:12, 4%, 274829
20081203,09:12, 5%, 274829
20081203,10:12, 6%, 274829
20081203,11:12, 7%, 274829
20081203,12:12, 8%, 281424596
20081203,13:12, 9%, 281424596


Voici mon code pour le moment (pas encore aux normes c'est pas le but pour le moment ):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <meta http-equiv="Content-Language" content="fr" />
  <title>Taille des file system</title>
</head>
<body>
<?php
function afficher_tableau($tableau)
{
  // on fait une boucle qui lit les éléments du tableau
  foreach ($tableau as $cle=>$valeur)
  {
    // si l'un des éléments est lui même un tableau alors on applique la fonction à ce tableau
    if(is_array($valeur))
    {
      // on affiche le nom de la clé et le début d'une liste pour décaler le contenu vers la droite
      echo $cle.' : <ul>';
      // ici se réalise la récursivité c'est à dire qu'on applique la fonction à l'élément en cours car c'est lui aussi un tableau
      afficher_tableau($valeur);
      // on ferme la liste
      echo '</ul>';
    }
    // si ce n'est pas un tableau alors on affiche le contenu de l'élément
    else
    {
      echo $cle.' = '.$valeur.' <br>';
    }
  }
}

$path="csv"; // là ou se trouvent les fichiers .csv
echo "<div>";
$constructeur = array();
if ($handle = opendir($path))
{
  while (false !== ($file = readdir($handle)))
  {
    if ($file != "." && $file != "..")
    {
      /*echo "<strong>$path/$file</strong>
      <br />
      <br />";*/
      $hpar = fopen ("$path/$file", "r");
      if ($hpar)
      {
        $nb_enregistrements="0";
        while (!feof($hpar))
        {
          $buffer = fgets ($hpar, 1024);
          $tab=explode (",", $buffer);
          if ($tab[0]!="" && $tab[1]!="" && $tab[2]!="" && $tab[3]!="")
          {
            $nb_enregistrements++;
            $Jour = substr($tab[0], 6,2);
            $Mois = substr($tab[0], 4,2);
            $Annee = substr($tab[0], 0, 4);
            $Heure = substr($tab[1], 0, 2);
            $Minute = substr($tab[1], 3, 2);
            $Date_Enregistrement="$Jour/$Mois/$Annee-$Heure:$Minute";

            $constructeur[$file]['Date'][]= $Date_Enregistrement;
            $constructeur[$file]['PourcentageOQP'][]=$tab[2];
            $constructeur[$file]['EspaceLibreKo'][]=$tab[3];
          }
        }
        afficher_tableau($constructeur);

        echo"<img src='grid.php?FS=$file&amp;Nb_Jours=$nb_enregistrements&amp;Valeurs=$constructeur' alt='Graphique' title='Graphique' />";
      }
      fclose ($hpar);
    }
  }
}
closedir($handle);
echo "</div>";
?>
</body>
</html>


Ce code m'affiche pour le moment un résultat de ce type :
_appli.csv : (le nom du fs testé et les 9 enregistrements du fichier.csv)

      Date :
            0 = 03/12/2008-05:12
            1 = 03/12/2008-06:12
            2 = 03/12/2008-07:12
            3 = 03/12/2008-08:12
            4 = 03/12/2008-09:12
            5 = 03/12/2008-10:12
            6 = 03/12/2008-11:12
            7 = 03/12/2008-12:12
            8 = 03/12/2008-13:12
      PourcentageOQP :
            0 = 1%
            1 = 2%
            2 = 3%
            3 = 4%
            4 = 5%
            5 = 6%
            6 = 7%
            7 = 8%
            8 = 9%
      EspaceLibreKo :
            0 = 274829
            1 = 274829
            2 = 274829
            3 = 274829
            4 = 274829
            5 = 274829
            6 = 274829
            7 = 281424596
            8 = 281424596 


Ma question : Comment passer toutes ces valeurs à mon graphique ??
echo"<img src='grid.php?FS=$file&amp;Nb_Jours=$nb_enregistrements&amp;Valeurs=$constructeur' alt='Graphique' title='Graphique' />";

$constructeur est un array donc ça ne semble pas passer Smiley bawling

grid.php me créer un graphique par FS et à besoin des infos suivantes :

Pour chaque point sur le graphique on a besoin de 3 données :
1 : La date de l'enregistrement
2 : la valeur en %
3 : la valeur en ko

On peut peut être intégrer la création du graphique dans la même page que le script principal ?

Je ne suis pas un pro des tableaux dynamiques et je n'arrive pas à récupérer mes données.
Peut on passer un array en paramètre ?

$constructeur contient bien le nom du fs + la date + la valeur en % + la valeur en ko non ?
Comment le récupérer de l'autre côté ?

Merci pour vos suggestions, infos, dépannage, etc...

Help !! je craque !! Smiley biggol
Modifié par Bilgor Le Rouge (10 Dec 2008 - 21:27)
Hello Bilgor,

personnellement j'aurais utilisé $_SESSION... et si pour une raison ou pour une autre tu ne peux/veux pas tu pourrais également regarder du côté de serialize.
Les sessions j'aurais du y penser tout seul Smiley confused bon je ne sais pas si je pourrais sur cette bécane mais à voir.

Pour serialize je ne connaissais pas mais ça me plait je vais tester ça demain.

Merci pour la réponse. Smiley cligne
J'ai essayé avec serialize mais le chemin de l'image devenait trop grand donc bug d'affichage sous IE au bout de 10 valeurs et bug de FF avec 35 valeurs... Smiley smile

Bref je suis passé avec les sessions sans souci. J'ai pu récupérer mes données facilement.

@keran :
Le problème de jpgraph que j'avais repéré aussi je te rassure est qu'il est dédié à une seule version de php soit 4 soit 5 or j'ai besoin sans paramétrage que ça fonctionne aussi bien sur l'un que sur l'autre. On mets les scripts sur le serveur on dezippe et c'est ok.
Le script que j'ai fait fonctionne avec php4 comme php5.

Artichow lui fonctionne avec les 2 versions ce dont j'ai besoins cependant le fait qu'il y ait 25 fichiers différents me rebute.

Mon graphique en courbes est basique certes mais ne nécessite que 2 fichiers. Celui qui prépare les données et celui qui les affiche.
Bref ça me suffit pour le moment on verra par la suite.

Merci cependant pour ton commentaire.
a écrit :
Artichow lui fonctionne avec les 2 versions ce dont j'ai besoins cependant le fait qu'il y ait 25 fichiers différents me rebute.


j'adore! c'est, en résumé, 20 ans de galères informatique...mais je ne te blame pas, je te comprend...idem pour zend framework

Bref je suis passé avec les sessions sans souci. J'ai pu récupérer mes données facilement.


alors là, s'il te plait, comment? avec gd? oui j'imagine mais je ne capte pas le fait qu'il faille passer par une session pour avoir un graph correct.
Oui avec GD. Je ne connais pas zend framework par contre.

C'est clair que pour un graph bien fait, joli à voir j'aurais du prendre Artichow ou jp graph ou un truc du style mais pour faire quelque chose en ayant le moins de fichiers possible c'était pas possible.

En fait le problème vient de l'appel du graph avec le valeurs en paramètres.
Si j'ai 200 enregistrements à lui donner donc via un array et que chaque enregistrement contient 4 infos comme dans mon cas, on ne peut pas passer de tableau en paramètre dans un
<img src='graphique.php?nomgraphique='MonGraphique'&amp;enregistrements=$TableauEnregistrements' alt='graph' title='graph'/>


Donc avec serialise de l'array ça fonctionne (avec TRÈS peu de données vu la variable générée) mais le mieux est la session.
Je colle mon tableau en variable de session et j'ai juste à la récupérer dans le script de création de mon graphique.
Du coup plus besoin de mettre en paramètre les valeurs dans l'appel de l'image.

Heu tu captais pas çà veut dire qu'il y a encore plus simple ?? Smiley eek