Menu

[PHP] manipulation de 2 fichiers textes [Résolu/Fermé]

Messages postés
168
Date d'inscription
dimanche 11 juillet 2010
Statut
Membre
Dernière intervention
29 juin 2016
- - Dernière réponse : neo_selen
Messages postés
168
Date d'inscription
dimanche 11 juillet 2010
Statut
Membre
Dernière intervention
29 juin 2016
- 1 déc. 2011 à 15:21
Bonjour/Bonsoir,

je souhaite créer un script qui, à partir d'un 1er fichier texte, composé ainsi:
mot1
mot2
mot3
etc... jusqu'au 9eme mot.

et faire ceci:
_lecture du fichier,enregistré dans une variable simple
avec $fp1=fopen($cheminfichier,255)
_variable simple découpée en tableau de mots par le séparateur de retour ligne
$resultat=explode($separateur,$fp1)
_puis écrire dans un second fichier, de manière à voir ça:
mot1mot1mot1
mot1mot1mot2
mot1mot1mot3
mot1mot2mot1
mot1mot2mot2
mot1mot2mot3
mot1mot3mot1
mot1mot3mot2
mot1mot3mot3
mot2mot1mot1
mot2mot1mot2
mot2mot1mot3
mot2mot2mot1
mot2mot2mot2
mot2mot2mot3
mot2mot3mot1
mot2mot3mot2
mot2mot3mot3
mot3mot1mot1
mot3mot1mot2
mot3mot1mot3
mot3mot2mot1
mot3mot2mot2
mot3mot2mot3
mot3mot3mot1
mot3mot3mot2
mot3mot3mot3
etc... comme quand on compte de 000 à 999.

L'opération manuelle étant assez longue... je ne préfère pas écrire manuellement plus de 50000 mots ainsi.(estimation faite avec ma liste!)

le but de ce script étant de proposer à un utilisateur qui, en écrivant ses mots préférés de lui générer une liste de mots de passe faciles à retenir. (et éventuellement à l'avenir de lui choisir un des mots de passe aléatoirement parmi la liste créée avec un autre script)

voici des bouts de codes faits jusqu'à présent:

// chemin du fichier
$fichier1='./dico.txt';
$fichier2='./dico_generated.txt';
$fp1=fopen($fichier1,"r");
$fp2=fopen($fichier2,"w+");

//préparation d'une case mémoire pour résultats assez grande pour tout mélange de mots de passes.60 caractères réservés !
for ($i=0;$i<60;$i++){$resultat.=" ";}

// ouverture du fichier
if($fp1 or $fp2) //Si $ressource_fichier ne vaut pas FALSE on peut continuer
{
$contenu_fichier = '';
while(!feof($fp1)) //Tant que l'on est pas à la fin du fichier
{
$contenu_fichier .= fgetc($fp1); //Récupère le caractère en cours et l'ajoute au contenu de la variable $contenu_fichier
}
$contenu = explode("\n", $contenu_fichier);
}
for($i=0;$i<count($contenu);$i++){$donnees=$resultat.$contenu_fichier[$i];}

/*
résumé des fonctions des variables:
fp1:chemin dico.txt
fp2:chemin dico_generated.txt
contenu_fichier:variable contenu du fichier 'dico' non traité
contenu: tableau du contenu du fichier 'dico' traité. taille actuelle: 13 mots
données:concaténation du tableau 'contenu'
*/
Afficher la suite 

2 réponses

Messages postés
76
Date d'inscription
jeudi 13 janvier 2011
Statut
Contributeur
Dernière intervention
9 décembre 2011
9
0
Merci
Salut j'ai pas tous saisie a ton problème, je sais pas si ca pourra t'aider :

l'algo qui te génère les 9 lignes + mot2mot2 ...

for ($i=1; $i<=9;$i++) {
for ($j=1; $j<=3;$j++) {
for ($k=1; $k<=3;$k++) {
print "mot".$i."mot".$j."mot".$k."<br />";
}
}
}

Si tu veux recuperer le contenu de chaque ligne dans un tableau utilise plutôt $tableau = file('tonfichier.txt');

(mon résultat :
mot1mot1mot1
mot1mot1mot2
mot1mot1mot3
mot1mot2mot1
mot1mot2mot2
mot1mot2mot3
mot1mot3mot1
mot1mot3mot2
mot1mot3mot3
mot2mot1mot1
mot2mot1mot2
mot2mot1mot3
mot2mot2mot1
mot2mot2mot2
mot2mot2mot3
mot2mot3mot1
mot2mot3mot2
ect ... jusqu'a 9


en remplaçant les boucles $k & $j par des count(tontableauquiviensdufichier) p-e tu réussira a faire qqchose.
neo_selen
Messages postés
168
Date d'inscription
dimanche 11 juillet 2010
Statut
Membre
Dernière intervention
29 juin 2016
12 -
le problème, c'est ça: mot1 , mot2 et mot3 matérialisent des mots définis par l'utilisateur, du genre toto poubelle et voiture ou autre chose....
et la liste peut être supérieure à trois mots. ma liste comporte 15 mots différents. tout bien calculé, les possibilités de combinaisons sont égales à... 50625 mots de passes possibles !

si on admet que quand on compte on affiche d'après une liste de 10 mots de 0 à 9 sur 3 emplacements (donc de 000 à 999) , alors tu comprendras ce que je souhaite faire

résultat pour deux mots toto et voiture:

totototo
totovoiture
voituretoto
voiturevoiture

voilà c'est plus simple sur deux mots.
sauf que sur 4 mots,séparés par des symboles que j'ai défini moi-même, c'est 50625 mots sans compter le changement de symboles, et en le comptant pour seulement 2 symboles différents ça fait donc 101250 mots de passes différents.

le but de ce script est de faciliter la création pour un utilisateur d'un mot de passe qu'il saura facilement retenir tout en étant pas facile pour un pirate à cracker !
neo_selen
Messages postés
168
Date d'inscription
dimanche 11 juillet 2010
Statut
Membre
Dernière intervention
29 juin 2016
12 -
mot1, mot2 et mot3 sont des noms de variables en fait, j'avais pas précisé il est vrai.
neo_selen
Messages postés
168
Date d'inscription
dimanche 11 juillet 2010
Statut
Membre
Dernière intervention
29 juin 2016
12 -
je sais déjà comment imbriquer les fonctions for. au milieu de toutes ces imbrications se trouve la formule qui se répètera donc 101250 fois. et le tout donne:

for ($i=0;$i<$nbmotsd;$i++){ //partie 1
for ($j=0;$j<$nbmotsd;$j++){ //partie 2
for ($k=0;$k<$nbmotsd;$k++){ //partie 3
for ($l=0;$l<$nbmotsd;$l++){//partie 4
for ($a=0;$a<$S[count($S)];$a++){//symboles
$resultat= $D[$i].$S[$a].$D[$j].$S[$a].$D[$k].$S[$a].$D[$l];
fputs($fp2,$resultat."\n");
} } } } }

non, le vrai problème est le code que j'ai posté dans la question. à part soit inscrire le dernier mot soit rien du tout, ça ne veut pas faire ce que je souhaite...
neo_selen
Messages postés
168
Date d'inscription
dimanche 11 juillet 2010
Statut
Membre
Dernière intervention
29 juin 2016
12 -
je viens de trouver l'erreur !!!
je me suis aperçu déjà que les options d'ouverture des fichiers étaient mauvaises.
de plus, la concaténation de cases d'un tableau ne semble pas possible. en les faisant passer par des variables intermédiaires cela devient chose possible !!!!!!
Messages postés
168
Date d'inscription
dimanche 11 juillet 2010
Statut
Membre
Dernière intervention
29 juin 2016
12
0
Merci
le code, corrigé. génère un fichier à partir d'une liste prédéfinie (à l'avenir je poste le code pour ouvrir une liste de mots dans un fichier,peu importe la longueur):

<?php
$fp2=fopen('dico_generated.txt',"c");
$D=array('mot1',mot2'','mot3','mot4','mot5','mot6','mot7','mot8','mot9','mot10','mot11','mot12','mot13');
$S=array('symbol1','symbol2','symbol3',symbol4',symbol5'');
define(NBMOTSD,12);
define(NBMOTSS,2);
for ($i=0;$i<13;$i++){ //partie 1
for ($j=0;$j<13;$j++){ //partie 2
for ($k=0;$k<13;$k++){ //partie 3
for ($l=0;$l<13;$l++){ //partie 4
for ($a=0;$a<5;$a++){//symboles
$mot1=$D[$i];
$mot2=$D[$j];
$mot3=$D[$k];
$mot4=$D[$l];
$symb=$S[$a];
$resultat= $mot1.$symb.$mot2.$symb.$mot3.$symb.$mot4."\n";
//echo $resultat; //décommenter pour tester le résultat
fwrite($fp2,$resultat."\r\n"); // mettre en comm. pour test echo.
} } } } }
fclose($fp2);
//
?>

mot1 à mot13 est ce que vous voulez comme mots pour votre liste.