Accueil > > > PHP5 - ARBORESCENCE SERVEUR + SUIVI PROJET
PHP5 - ARBORESCENCE SERVEUR + SUIVI PROJET
Information sur la source
Description
Cette classe PHP5 permet de créér un fichier html pour le suivi d'un projet: Il inscrit l'arborescence serveur (avec taille et nombre des dossiers et fichiers) avec quelques détails pouvant être utiles pour le suivi d'un projet, dans les fichiers php: -Nombre de lignes de commentaire/Nbre de lignes total; -Eventuelle connexion à Mysql; -Nbre de fichiers inclus (Je sais pas si ca peut vous servir, moi oui, alors je vous le laisse...); Cette liste devrait évoluer avec mes besoins, ou avec les votres si ca vous interesse Quelques paramétrages: -Possibilité de choisir de ne pas afficher certains dossiers (par leur nom) -Possibilité de choisir soit toutes les extensions qu'on veut afficher, soit celles qu'on ne veut pas afficher -Choix de si on veut ou pas afficher les dossiers vides (ou du moins qui ne contiennent aucun fichier que l'on veut afficher) -Choix des icones standardes ou de celles que vous désirez -Choix d'afficher ou non les statistiques des fichiers php décrites au-dessus. -Choix de conserver le bout de css qui est dans le fichier test_arbre.php, ou d'en créer un vous-même En préparation: -Notification dans les statistiques des fichiers contenant du javascript -Application d'un fonction de callback définie par l'utilisateur sur les fichiers du type qu'il selectionne (Pour permettre, par exemple, de stocker dans un répertoire a_graver tous les fichiers dont la date de derniere modification est plus récente que x jours) -Réctification des éventuelles erreurs trouvées par les utilisateurs -Ajout de ce qui vous plaira, dans la limite du possible et de l'utile :-) Un exemple d'utilisation est fourni dans le zip, avec des icones etc...
Source
- <?php
- class arbre
- {
- private $dossier;//Dossier de base à parcourir
- private $extensions;//voir plus bas
- private $dossiers_exclus;//voir plus bas
- public $unite_indentation = ' ';//de base, plusieurs espaces, mais peut être remplacé par n'importe quoi (même des trucs pas beaux)
- public $afficher_dossiers_vides=TRUE;//TRUE/FALSE: On affiche (ou pas) les dossiers vides
- public $lister_parametres_php=TRUE;//TRUE/FALSE: On liste (ou pas) les paramètres choisis pour les fichiers php
- public $chemin_icones='icones/';//chemin vers le dossier contenant les icones.
- //ATTENTION: les icones sont des fichiers gif ou jpeg nommés uniquement par l'extension; ex: $this->chemin_icones.'/php' est le nom de l'icone pour les fichiers php. Il n'y a pas d'extension
-
- /*
- $extensions est un tableau contenant les extensions autorisées ou interdites;
- Si $extensions[0]='*', alors on accepte tout sauf le reste du tableau, sinon
- on accepte uniquement les extensions du tableau
- $dossiers_exclus contient les dossiers à ne pas prendre en compte;
- */
-
- function __construct($dossier='.',$extensions=array('*','htaccess','htpassword'),$dossiers_exclus=array())
- {//constructeur, blablabla
- $this->dossier = $dossier;
- $this->extensions = $extensions;
- $this->dossiers_exclus = $dossiers_exclus;
- }
-
- function creer_fichier()
- {//On appelle la fonction récursive
- $retour=$this->parcourir($this->dossier,0,$taille,$nbfich,$nbdoss);
- //On crée la ligne de titre et on l'envoie avec le reste ($retour)
- return '<span class="stats_titre">Dossier: '.realpath($this->dossier).' ('.$this->afficher_nombre('fichier',$nbfich).$this->afficher_nombre('dossier',$nbdoss).round($taille/1024,2).' ko)</span>'.$retour;
- }
-
- private function afficher_nombre($quoi,$combien)
- {//permet juste de creer un message si nécessaire, et de le mettre au pluriel s'il le faut. Rien de bien comlpiqué
- if ($combien===0)
- return '';
- if ($combien===1)
- return $combien.' '.$quoi.' - ';
- return $combien.' '.$quoi.'s - ';
- }
-
- function parcourir($dossieraparcourir,$debut,&$tailletotale,&$nbfichiers,&$nbdossiers)
- {//Fonction utilisée récursivement pour parcourir l'arborescence
- //initialisation des variables incrémentées
- $indent='';
- $retour='';
- $nbfichiers=0;
- //indentation faite avec des espaces
- //Création de la "hauteur" d'indentation
- for($num=0;$num<$debut;$num++)
- $indent .= $this->unite_indentation;//une unite pour chaque niveau
- //On charge le $dossieraparcourir dans le tableau $dir
- $dir=scandir($dossieraparcourir);
- //scandir classant par ordre alphabétique uniquement, on parcourt 2 fois le tableau;
- foreach($dir as $dirfile)
- {// la première fois pour les dossiers, classés alphabétiquement
- if(is_file($dossieraparcourir.'/'.$dirfile) OR $dirfile === '.' OR $dirfile === '..')
- continue;//Si c'est ., .. ou un fichier, on sort
- if (in_array($dirfile,$this->dossiers_exclus))
- continue;//Si on choisit d'exclure ce dossier, on sort
- $nbdoss=0;
- //on récursivie tout ca
- $ledossier = $this->parcourir($dossieraparcourir.'/'.$dirfile,$debut+1,$taille,$nbfich,$nbdoss);
- if (strlen($ledossier)===0 AND $this->afficher_dossiers_vides === FALSE)
- continue;
- //On crée la ligne html
- $retour .= '<span class="stats_dossier">'.$indent.'<img src="'.$this->chemin_icones.'dossier_ferme.gif" width="15" height="15" /> '.$dirfile.' ('.$this->afficher_nombre('fichier',$nbfich).$this->afficher_nombre('dossier',$nbdoss).round($taille/1024,2).' ko)</span>'."\n";
- //On inscrit ce qui a été récupéré par récursivité
- $retour .= $ledossier;
- //On ajoute la taille de ce dossier à la taille totale
- $tailletotale += $taille;
- $nbfichiers += $nbfich;
- $nbdossiers += $nbdoss + 1;
- }
- foreach($dir as $dirfile)
- {// la deuxième fois pour les fichiers, toujours classés alphabétiquement
- //On crée une variable contenant l'adresse du fichier, celle ci étant relativement souvent utilisée
- $fichier=$dossieraparcourir.'/'.$dirfile;
- if(is_dir($fichier))
- continue;//On sort si c'est un dossier
- $nbfichiers++;//incrémentation du nombre de fichiers
- //On récupère l'extension
- $extension=strtolower(array_pop(explode('.',$dirfile)));
- if ($this->extensions[0]==='*' AND in_array($extension,$this->extensions))
- continue;//Si on choisit par défaut toutes les extensions, mais qu'on éxclut celle-la, on sort
- elseif ($this->extensions[0]!=='*' AND !in_array($extension,$this->extensions))
- continue;//Si cette extension n'est pas dans la liste autorisée, on sort aussi
- //Si l'icone de cette extension existe, on l'affiche, sinon on affiche defaut
- if (is_file($this->chemin_icones.$extension))
- $retour .= '<span class="stats_fichier">'.$indent.'<img src="'.$this->chemin_icones.$extension.'" width="15" height="15" /> ';
- else
- $retour .= '<span class="stats_fichier">'.$indent.'<img src="'.$this->chemin_icones.'defaut" width="15" height="15" /> ';
- //on inscrit le nom et la taille du fichier
- $retour.= $dirfile.' ('.round(filesize($fichier)/1024,2).' ko)</span>'."\n";
- $tailletotale += filesize($fichier);
- //si c'est un fichier php, qu'on choisit d'afficher des stats, et que ce n'est pas l'icone (fichier juste nommé php)
- if (in_array(strtolower($extension),array('php','php3','php4','php5','php6')) AND $this->lister_parametres_php AND $dirfile!=='php')
- {
- $stat_incl=$this->voir_params($fichier);
- //On insère le résultat uniquement s'il y a quelque chose à afficher
- if (strlen($stat_incl)>0)
- $retour.='<span class="stats_commentaire">'.$indent.$this->unite_indentation.$stat_incl."</span>\n";
- }
- }
- //On renvoie la sortie
- return $retour;
- }
-
- function voir_params($fichier)
- {//fonction punlique, pour pouvoir l'appeler sur un fichier particulier sans avoir à tout regarder
- //motif de recherche des inclusions
- $motif = "/( |\n)(include|include_once|require|require_once)\((.+)\)/";
- //récup du contenu du fichier
- $contenu=file_get_contents($fichier);
- //on récupère les inclusions
- preg_match_all($motif,$contenu,$reponse,PREG_SET_ORDER);
- //on les compte
- $nbinclusions=count($reponse);
- //On recherche une ouverture de connection mysql, auquel cas on crée le message qui le stipule
- if (strpos($contenu,'mysql_'.'connect')!==FALSE)
- $mysql=' Connection à mysql;';
- else
- $mysql='';
- //on divise en un tableau de ligne, comme l'aurait fait file($fichier)
- $lignes=explode("\n",$contenu);
- //Initialisation des variables
- $nbcom=0;
- $ouvert=FALSE;
- $nblignes=0;
- foreach($lignes as $ligne)
- {
- $ligne=str_replace(' ',' ',$ligne);//Pour compter comme il faut les lignes de code, sans tenir compte des lignes ne contenant que des tabulations
- if (trim($ligne)==='')
- continue;//On ne compte pas les lignes vides
- if (strpos($ligne,'*/')!==FALSE AND strpos($ligne,'/*')!==FALSE)
- $nbcom++;//S'il y a /* et */, on compte uniquement la ligne en commentaire (Ne tient donc pas compte d'un éventuel /*com*/[code]/*, mais faut pas abuser)
- elseif ($ouvert AND strpos($ligne,'*/')!==FALSE)
- {//Si le commentaire est ouvert et qu'on le ferme, on fait pareil
- $ouvert=FALSE;
- $nbcom++;
- }
- elseif ($ouvert)
- $nbcom++;//Si le commentaire ouvert et qu'il ne contient pas de */
- elseif (strpos($ligne,'/*')!==FALSE)
- {//Si on est hors commentaire, et qu'on en ouvre un, on fait pareil
- $nbcom++;
- $ouvert=TRUE;
- }
- elseif (strpos($ligne,'//')!==FALSE)
- $nbcom++;//Pour compter les commentaires en ligne. Celle-ci étant commentée, on la compte comme un ligne complète de commentaire
- $nblignes++;
- }
- //On crée le message donnant le nombre d'inclusions
- if ($nbinclusions>0)
- $phraseinclusions=$nbinclusions.' inclusion(s);';
- else
- $phraseinclusions='';
- //On crée le message donnant le nombre de lignes commentées par rapport au nombre de lignes total
- if ($nbcom>0)
- $phrasecommentaires=' '.$nbcom.' lignes de commentaire sur '.$nblignes.';';
- else
- $phrasecommentaires='';
- //On envoit le message en retour
- return $phraseinclusions.$phrasecommentaires.$mysql;
- }
- }
<?php
class arbre
{
private $dossier;//Dossier de base à parcourir
private $extensions;//voir plus bas
private $dossiers_exclus;//voir plus bas
public $unite_indentation = ' ';//de base, plusieurs espaces, mais peut être remplacé par n'importe quoi (même des trucs pas beaux)
public $afficher_dossiers_vides=TRUE;//TRUE/FALSE: On affiche (ou pas) les dossiers vides
public $lister_parametres_php=TRUE;//TRUE/FALSE: On liste (ou pas) les paramètres choisis pour les fichiers php
public $chemin_icones='icones/';//chemin vers le dossier contenant les icones.
//ATTENTION: les icones sont des fichiers gif ou jpeg nommés uniquement par l'extension; ex: $this->chemin_icones.'/php' est le nom de l'icone pour les fichiers php. Il n'y a pas d'extension
/*
$extensions est un tableau contenant les extensions autorisées ou interdites;
Si $extensions[0]='*', alors on accepte tout sauf le reste du tableau, sinon
on accepte uniquement les extensions du tableau
$dossiers_exclus contient les dossiers à ne pas prendre en compte;
*/
function __construct($dossier='.',$extensions=array('*','htaccess','htpassword'),$dossiers_exclus=array())
{//constructeur, blablabla
$this->dossier = $dossier;
$this->extensions = $extensions;
$this->dossiers_exclus = $dossiers_exclus;
}
function creer_fichier()
{//On appelle la fonction récursive
$retour=$this->parcourir($this->dossier,0,$taille,$nbfich,$nbdoss);
//On crée la ligne de titre et on l'envoie avec le reste ($retour)
return '<span class="stats_titre">Dossier: '.realpath($this->dossier).' ('.$this->afficher_nombre('fichier',$nbfich).$this->afficher_nombre('dossier',$nbdoss).round($taille/1024,2).' ko)</span>'.$retour;
}
private function afficher_nombre($quoi,$combien)
{//permet juste de creer un message si nécessaire, et de le mettre au pluriel s'il le faut. Rien de bien comlpiqué
if ($combien===0)
return '';
if ($combien===1)
return $combien.' '.$quoi.' - ';
return $combien.' '.$quoi.'s - ';
}
function parcourir($dossieraparcourir,$debut,&$tailletotale,&$nbfichiers,&$nbdossiers)
{//Fonction utilisée récursivement pour parcourir l'arborescence
//initialisation des variables incrémentées
$indent='';
$retour='';
$nbfichiers=0;
//indentation faite avec des espaces
//Création de la "hauteur" d'indentation
for($num=0;$num<$debut;$num++)
$indent .= $this->unite_indentation;//une unite pour chaque niveau
//On charge le $dossieraparcourir dans le tableau $dir
$dir=scandir($dossieraparcourir);
//scandir classant par ordre alphabétique uniquement, on parcourt 2 fois le tableau;
foreach($dir as $dirfile)
{// la première fois pour les dossiers, classés alphabétiquement
if(is_file($dossieraparcourir.'/'.$dirfile) OR $dirfile === '.' OR $dirfile === '..')
continue;//Si c'est ., .. ou un fichier, on sort
if (in_array($dirfile,$this->dossiers_exclus))
continue;//Si on choisit d'exclure ce dossier, on sort
$nbdoss=0;
//on récursivie tout ca
$ledossier = $this->parcourir($dossieraparcourir.'/'.$dirfile,$debut+1,$taille,$nbfich,$nbdoss);
if (strlen($ledossier)===0 AND $this->afficher_dossiers_vides === FALSE)
continue;
//On crée la ligne html
$retour .= '<span class="stats_dossier">'.$indent.'<img src="'.$this->chemin_icones.'dossier_ferme.gif" width="15" height="15" /> '.$dirfile.' ('.$this->afficher_nombre('fichier',$nbfich).$this->afficher_nombre('dossier',$nbdoss).round($taille/1024,2).' ko)</span>'."\n";
//On inscrit ce qui a été récupéré par récursivité
$retour .= $ledossier;
//On ajoute la taille de ce dossier à la taille totale
$tailletotale += $taille;
$nbfichiers += $nbfich;
$nbdossiers += $nbdoss + 1;
}
foreach($dir as $dirfile)
{// la deuxième fois pour les fichiers, toujours classés alphabétiquement
//On crée une variable contenant l'adresse du fichier, celle ci étant relativement souvent utilisée
$fichier=$dossieraparcourir.'/'.$dirfile;
if(is_dir($fichier))
continue;//On sort si c'est un dossier
$nbfichiers++;//incrémentation du nombre de fichiers
//On récupère l'extension
$extension=strtolower(array_pop(explode('.',$dirfile)));
if ($this->extensions[0]==='*' AND in_array($extension,$this->extensions))
continue;//Si on choisit par défaut toutes les extensions, mais qu'on éxclut celle-la, on sort
elseif ($this->extensions[0]!=='*' AND !in_array($extension,$this->extensions))
continue;//Si cette extension n'est pas dans la liste autorisée, on sort aussi
//Si l'icone de cette extension existe, on l'affiche, sinon on affiche defaut
if (is_file($this->chemin_icones.$extension))
$retour .= '<span class="stats_fichier">'.$indent.'<img src="'.$this->chemin_icones.$extension.'" width="15" height="15" /> ';
else
$retour .= '<span class="stats_fichier">'.$indent.'<img src="'.$this->chemin_icones.'defaut" width="15" height="15" /> ';
//on inscrit le nom et la taille du fichier
$retour.= $dirfile.' ('.round(filesize($fichier)/1024,2).' ko)</span>'."\n";
$tailletotale += filesize($fichier);
//si c'est un fichier php, qu'on choisit d'afficher des stats, et que ce n'est pas l'icone (fichier juste nommé php)
if (in_array(strtolower($extension),array('php','php3','php4','php5','php6')) AND $this->lister_parametres_php AND $dirfile!=='php')
{
$stat_incl=$this->voir_params($fichier);
//On insère le résultat uniquement s'il y a quelque chose à afficher
if (strlen($stat_incl)>0)
$retour.='<span class="stats_commentaire">'.$indent.$this->unite_indentation.$stat_incl."</span>\n";
}
}
//On renvoie la sortie
return $retour;
}
function voir_params($fichier)
{//fonction punlique, pour pouvoir l'appeler sur un fichier particulier sans avoir à tout regarder
//motif de recherche des inclusions
$motif = "/( |\n)(include|include_once|require|require_once)\((.+)\)/";
//récup du contenu du fichier
$contenu=file_get_contents($fichier);
//on récupère les inclusions
preg_match_all($motif,$contenu,$reponse,PREG_SET_ORDER);
//on les compte
$nbinclusions=count($reponse);
//On recherche une ouverture de connection mysql, auquel cas on crée le message qui le stipule
if (strpos($contenu,'mysql_'.'connect')!==FALSE)
$mysql=' Connection à mysql;';
else
$mysql='';
//on divise en un tableau de ligne, comme l'aurait fait file($fichier)
$lignes=explode("\n",$contenu);
//Initialisation des variables
$nbcom=0;
$ouvert=FALSE;
$nblignes=0;
foreach($lignes as $ligne)
{
$ligne=str_replace(' ',' ',$ligne);//Pour compter comme il faut les lignes de code, sans tenir compte des lignes ne contenant que des tabulations
if (trim($ligne)==='')
continue;//On ne compte pas les lignes vides
if (strpos($ligne,'*/')!==FALSE AND strpos($ligne,'/*')!==FALSE)
$nbcom++;//S'il y a /* et */, on compte uniquement la ligne en commentaire (Ne tient donc pas compte d'un éventuel /*com*/[code]/*, mais faut pas abuser)
elseif ($ouvert AND strpos($ligne,'*/')!==FALSE)
{//Si le commentaire est ouvert et qu'on le ferme, on fait pareil
$ouvert=FALSE;
$nbcom++;
}
elseif ($ouvert)
$nbcom++;//Si le commentaire ouvert et qu'il ne contient pas de */
elseif (strpos($ligne,'/*')!==FALSE)
{//Si on est hors commentaire, et qu'on en ouvre un, on fait pareil
$nbcom++;
$ouvert=TRUE;
}
elseif (strpos($ligne,'//')!==FALSE)
$nbcom++;//Pour compter les commentaires en ligne. Celle-ci étant commentée, on la compte comme un ligne complète de commentaire
$nblignes++;
}
//On crée le message donnant le nombre d'inclusions
if ($nbinclusions>0)
$phraseinclusions=$nbinclusions.' inclusion(s);';
else
$phraseinclusions='';
//On crée le message donnant le nombre de lignes commentées par rapport au nombre de lignes total
if ($nbcom>0)
$phrasecommentaires=' '.$nbcom.' lignes de commentaire sur '.$nblignes.';';
else
$phrasecommentaires='';
//On envoit le message en retour
return $phraseinclusions.$phrasecommentaires.$mysql;
}
}
Conclusion
Pour le moment, aucun bug trouvé, mais je compte sur vous pour me le signaler si vous en voyez. En tout cas, windows donne les même statistiques de poids. ;-)
Je l'ai mis en initié en pensant que tous les débutants ne pourront pas comprendre l'intégralité du code (pas de l'utilisation j'espère) facilement, mais si vous ne pensez pas que ca ne vaut ce niveau, signalez le moi, je modifierai...
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
connexion avec sql server [ par mabrouk ]
bonjour, svp je travaille sur un poste client windows2000 server dans un domaine j'ai installé easyphp(php+apache+mysql), j'ai voulu se connecter a no
Attention question pour les pros du php ! [ par Neozix ]
Bonjour,Merci de m'accorder un peu de temps pour mon problème. Voici la bete-----------------------------------------------------<?phpinclude("incl
php sql server pb connexion??!! [ par ronando ]
g installer easy php.ma base de données est sql server et tt ca tourne sous windows 2000.Mais ca ne fonctionne pas quand je veux me connecter avec la
SQL SERVER [ par ceeno ]
Bonjour , j'ai un probleme avec SQL SERVER , je souhaiterais l'installer squr un autre disque que le c:\ seulement je n'y arrive pas...Quelqu'un poura
Afficher l'arborescence d'un autre serveur [ par klandestin ]
Bonjour,je suis en stage et pour un intranet je dois écrire un sript php pour afficher l'arboresence du serveur NT (où sont stockés les comptes utilis
Drole de message d erreur !!!! [ par songes ]
Un truc bizarre arrive de temps en temps. J ai ce message d'erreur :Server Error The following error occurred:The server closed the connection while r
arborescence forum [ par BirD ]
Hello, je suis en train de créer un forum, mais je ne sais pas comment réaliser l'arborecence de celui-ci, si quelqu'un à une idée (pas besoin de code
Pb Windows Server 2003 / PHP [ par Crazyht ]
Voila j'ai installé ce Week End mon tout nouveau Windows Serveur 2003 avec IIS 6, je lui colle mon php 4.3.x, et enfin installe phpMyAdmin et le confi
Recherche sur un site [ par Gregco ]
Hello,Question question... je programme énormément en asp et j'ai envie de découvrir php...J'ai recourt au forum parce que j'ai besoin d'une informati
(ftp) comment copier un fichier sur le server a partir de son ordinateur [ par tclo2 ]
ftp svp Bonjour comment lire un fichier des sources de son ordinateur (c:fichier) et le copier sur son serveur (http://serveur/fichier)
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|