PHP analyse de fichiers texte
mmoussouni
Messages postés
339
Statut
Membre
-
mmoussouni Messages postés 339 Statut Membre -
mmoussouni Messages postés 339 Statut Membre -
Bonjour,
Je souhaite faire un site en HTML-PHP-CSS pour télécharger et se renseigner sur les paquets dpkg. Je dispose fichiers d'index de ce type : (plusieurs paquets par fichiers séparé par un saut de ligne double)
Je souhaiterais créer une classe "apt" (ligne package) contenant les variables texte priority, section, installed-size, maintainer, ... et les listes de texte depends, recommends, suggests, conflicts, ...
Le résultat ressemblerait à ça : https://packages.ubuntu.com/fr/natty/apt
Merci d'avance.
Je souhaite faire un site en HTML-PHP-CSS pour télécharger et se renseigner sur les paquets dpkg. Je dispose fichiers d'index de ce type : (plusieurs paquets par fichiers séparé par un saut de ligne double)
Package: apt Priority: important Section: admin Installed-Size: 6204 Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Original-Maintainer: APT Development Team <deity@lists.debian.org> Architecture: i386 Version: 0.8.13.2ubuntu2 Replaces: manpages-pl (<< 20060617-3~) Provides: libapt-pkg4.10 Depends: libc6 (>= 2.8), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.5), zlib1g (>= 1:1.2.2.3) Recommends: ubuntu-keyring, gpg Suggests: aptitude | synaptic | wajig, dpkg-dev, apt-doc, bzip2, lzma, python-apt Conflicts: python-apt (<< 0.7.93.2~) Filename: pool/main/a/apt/apt_0.8.13.2ubuntu2_i386.deb Size: 2100008 MD5sum: 74511271a1636702bdff86679b7bf1f8 SHA1: 307098d2526624d76663e546a03ce49df6e4556c SHA256: 17b4618512937027c33593f8b3eb7741d8dc694a9e940bdd9e2b512088c0cad7 Description: Advanced front-end for dpkg This is Debian's next generation front-end for the dpkg package manager. It provides the apt-get utility and APT dselect method that provides a simpler, safer way to install and upgrade packages. . APT features complete installation ordering, multiple source capability and several other unique features, see the Users Guide in apt-doc. Bugs: https://bugs.launchpad.net/ubuntu/+filebug/+login Build-Essential: yes Origin: Ubuntu Supported: 18m Task: minimal
Je souhaiterais créer une classe "apt" (ligne package) contenant les variables texte priority, section, installed-size, maintainer, ... et les listes de texte depends, recommends, suggests, conflicts, ...
Le résultat ressemblerait à ça : https://packages.ubuntu.com/fr/natty/apt
Merci d'avance.
A voir également:
- PHP analyse de fichiers texte
- Renommer des fichiers en masse - Guide
- Analyse composant pc - Guide
- Explorateur de fichiers - Guide
- Fichiers epub - Guide
- Gestionnaire de fichiers - Télécharger - Gestion de fichiers
3 réponses
est ce que tu veux extraire en php les données texte de ce fichier ? si oui c'est possible par une expression régulière ... et je peux te le faire, sinon je ne sais pas...
le probleme c'est que les 4 fichiers font plus d'un million de lignes. Mais j'ai trouvé, avec un problème : j'ai du augmenter la limite de mémoire vive maximale pour php, ainsi que le temps d'éxecution maximal.
Résumé : La page devrait extraire ce qui est placé à droite des ":" et le placer dans le champ MySQL correspondant à ce qui est à gauche.
Code actuel (commenté) :
C'est un peu (beaucoup) chaotique mais ca marche. Reste à améliorer le temps d'éxecution et la mémoire utilisée.....
Résumé : La page devrait extraire ce qui est placé à droite des ":" et le placer dans le champ MySQL correspondant à ce qui est à gauche.
Code actuel (commenté) :
<?php
include('../resources/functions.php');
is_admin(1); // Pour l'intégration future //
$alert=fopen('../resources/updating.env','r+'); // Permet au site de se couper lors de la maj de la db //
fwrite($alert,'TRUE ');
connect_db(); // On comprends... //
$table=array('natty_main_binaryi386','natty_multiverse_binaryi386','natty_restricted_binaryi386','natty_universe_binaryi386');
$champs=array("package","priority","section","installed_size","maintainer","original_maintainer","architecture","version","replaces","provides","depends","recommends","suggests","conflicts","filename","size","md5","sha1","sha256","description","bugs","build_essential","origin","supported","task","homepage",);
$champs_r=array("Package","Priority","Section","Installed-Size","Maintainer","Original-Maintainer","Architecture","Version","Replaces","Provides","Depends","Recommends","Suggests","Conflicts","Filename","Size","MD5sum","SHA1","SHA256","Description","Bugs","Build-Essential","Origin","Supported","Task","Homepage");
for($k=0;$k<count($table);$k++)
{
$index=fopen('../resources/index/'.$table[$k],'r');
req_sql('DELETE FROM '.$table[$k]); // Ma fonction de requete MySQL qui gère aussi les erreurs //
$nb_l=count(file('../resources/index/'.$table[$k]));
echo('Nombre de lignes l : '.$nb_l.'<br />');
$nb_c=count($champs);
for($j=0;$j<$nb_c;$j++)
{
${$champs[$j]}=NULL;
}
for($i=0;$i<$nb_l;$i++)
{
$temp=fgets($index);
$temp=rtrim($temp);
$temp=str_replace('\'','-',$temp);
$temp=str_replace('"','-',$temp);
if(strlen(rtrim($temp))==0)
{
req_sql('INSERT INTO '.$table[$k].' VALUES("","'.$package.'","'.$priority.'","'.$section.'","'.$installed_size.'","'.$maintainer.'","'.$original_maintainer.'","'.$architecture.'","'.$version.'","'.$replaces.'","'.$provides.'","'.$depends.'","'.$recommends.'","'.$suggests.'","'.$conflicts.'","'.$filename.'","'.$size.'","'.$md5.'","'.$sha1.'","'.$sha256.'","'.$description.'","'.$bugs.'","'.$build_essential.'","'.$origin.'","'.$supported.'","'.$task.'","'.$homepage.'")');
for($j=0;$j<$nb_c;$j++)
{
${$champs[$j]}=NULL;
}
}
else
{
if(preg_match('/:/i',$temp))
{
$ligne=explode(':',$temp,2);
for($j=0;$j<$nb_c;$j++)
{
if($ligne[0]==$champs_r[$j])
{
${$champs[$j]}=$ligne[1];
$bfr=$champs[$j];
}
}
}
else
{
${$bfr}=${$bfr}.' '.$temp;
}
}
}
fclose($index);
}
fseek($alert,0);
fwrite($alert,'FALSE');
fclose($alert);
mysql_close();
echo("<br />ok");
?>
C'est un peu (beaucoup) chaotique mais ca marche. Reste à améliorer le temps d'éxecution et la mémoire utilisée.....