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.
--
[url=http://www.forum-orange.com/][img]http://www.forum-orange.com/signature.php?name=DS8jjmMhSnH8MIe_qHmwYSuvNHw/img/url
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.
--
[url=http://www.forum-orange.com/][img]http://www.forum-orange.com/signature.php?name=DS8jjmMhSnH8MIe_qHmwYSuvNHw/img/url
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é) :<?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.....
-