Page 1 sur 1

taille max d'un array() ?

Posté : 15 sept. 2009, 01:04
par nicoo
Bonjour,

J'aimerai savoir combien d'élément max peut contenir un tableau en php ?
Je voudrais en fait :
- générer aléatoirement un mot de passe,
- stocker ce dernier dans un tableau, le but étant d'éviter les doublons, donc je controlerai avec array_key_exist()
- une fois ma boucle fini, j'écris le tout dans un fichier.

Je voudrais en avoir plusieurs millions, est-ce que le tableau et/ou le moteur PHP tiendra le choc ?
Y a t'il d'autres structures de données que je puisse utiliser a part les tableaux ?
Niveau hardware, je ne sais pas si ca joue, je developpe sous windows vista avec easyphp, 4go de ram, intel quad core.

Merci.

Re: taille max d'un array() ?

Posté : 15 sept. 2009, 01:15
par Dr@ke
Une base de données serait plus efficace, bien que dans ton cas -> tu vas surcharger je pense inutilement ton site Web.
Car avec une bonne génération aléatoire, tu pourras avoir en gros 1 chance sur un million de tomber sur le même...

[EDIT]
Par exemple avec la fonction rand()
http://www.php.net/manual/fr/function.rand.php

Et une chaine de 8 caractères comprenant des lettres en minuscules et en majuscules + des chiffres
Cela dois dépasser largement le million de possibilités ...
Enfin c'est juste mon avis :wink:

Re: taille max d'un array() ?

Posté : 15 sept. 2009, 02:33
par AB
Quand on a beaucoup de données à stocker et de surcroit si on a à faire des recherches sur ces données on utilise une base de donnée, c'est étudié pour.

Cela t'évitera de te heurter aux limite mémoire du serveur (pas besoin de charger tout le tableau) et ce sera de toutes façons plus rapide qu'un tableau. Les bases de données sont conçues spécifiquement pour le genre d'usage dont tu parles avec entre autre des fonctions d'indexation sur les champs de recherche.

Il y a un script/tuto sur l'inscription dans un espace membre ici. C'est très voisin de ce dont tu as besoin.

Re: taille max d'un array() ?

Posté : 15 sept. 2009, 02:46
par Dr@ke
Tout en gardant à l'esprit que si ta génération aléatoire a une probabilité d' 1 sur 100 millions.
Te fier aux probabilités dans ce cas -> t'évitera de stocker 100 millions de mots de passe dans ta base de donnée.
Enfin cela me parait un point a garder à l'esprit ensuite tu fais le pour le contre...

Re: taille max d'un array() ?

Posté : 15 sept. 2009, 03:24
par AB
Oui tu as raison s'il n'a pas besoin de stocker son mot de passe ni de le rechercher par la suite, mais ce serait bien étonnant.
Ou alors s'il s'agit simplement de générer un identifiant unique il y a la fonction uniqid() spécialement conçue pour cela (pas possibilité de probabilité défavorable) :wink:

Re: taille max d'un array() ?

Posté : 15 sept. 2009, 03:34
par Dr@ke
Ah cool, je connaissais pas uniqid(), oui tu as raison c'est parfais pour ce qu'il veut faire, et ensuite éventuellement juste utiliser une Bd pour stocker les ID choisis comme mot de passe par chaque utilisateur...

[EDIT]
Peut-être associé avec la fonction substr() pour en retirer que 8 caractères.
Pour le coté pratique...

Re: taille max d'un array() ?

Posté : 15 sept. 2009, 03:46
par AB
Ben si tu utilises la fonction telle qu'elle est conseillée tu n'as aucun risque de probabilité défavorable. Si tu retires des caractères tu n'es plus certain à 100%...
Mais pour trouver la meilleure solution, attendons maintenant la réponse nicoo

Re: taille max d'un array() ?

Posté : 15 sept. 2009, 08:17
par nicoo
Salut !

Merci pour toutes ces infos !
J'avais réfléchi au niveau des proba, je ne pensais que la proba d'avoir un doublon etait si faible.
Par exemple si je génère 25 millions d'unique string avec uniqueid() je n'aurai pas de doublons, donc dans ce cas là pas besoin de vérifier donc pas besoin de bdd pour gérer ca.
Merci bien :)

Re: taille max d'un array() ?

Posté : 15 sept. 2009, 17:32
par dunbar
Salut,
Ceci dit en général ont vérifie les doublond d'après le login ou pseudo jamais d'après un mot de passe, je n'en voie pas l'interêt :?: ou alors j'ai du louper une ou deux lignes :wink:
Je ne voie pas ou il y aurait un soucis si deux utilisateurs avait le même moy de passe :-k (en ayant bien sur éviter les doublond login, pseudo, ou mail)

Re: taille max d'un array() ?

Posté : 15 sept. 2009, 17:49
par thehawk
Sauf dans le cas de rainbow tables (table de mot de passe , pour les attaques par dico en md5 par exemple).

Bye hawk

Re: taille max d'un array() ?

Posté : 15 sept. 2009, 18:15
par dunbar
Sauf dans le cas de rainbow tables (table de mot de passe , pour les attaques par dico en md5 par exemple).

Bye hawk
:-k

Re: taille max d'un array() ?

Posté : 16 sept. 2009, 00:28
par FredoMkb
Salut :)

Je pense aussi que le mot de passe, hormis son rôle lors d'une identification, ne doit pas servir à des recherches, des tris, des sélections, etc.

De plus, il peut arriver qu'une personne ouvre plusieurs comptes avec des logins différents mais en utilisant toujours le même mot de passe, ce n'est pas courant, mais ça existe...

Bref, pour moi le mot de passe est une donnée critique qui ne doit servir qu'à l'étape d'identification, en dehors de ça, je ne vois pas trop l'intérêt de l'utiliser... mais c'est juste un avis ;)

Re: taille max d'un array() ?

Posté : 16 sept. 2009, 11:40
par thehawk
Bonjour,

J'aimerai savoir combien d'élément max peut contenir un tableau en php ?
Je voudrais en fait :
- générer aléatoirement un mot de passe,
- stocker ce dernier dans un tableau, le but étant d'éviter les doublons, donc je controlerai avec array_key_exist()
- une fois ma boucle fini, j'écris le tout dans un fichier.

Je voudrais en avoir plusieurs millions, est-ce que le tableau et/ou le moteur PHP tiendra le choc ?
Y a t'il d'autres structures de données que je puisse utiliser a part les tableaux ?
Niveau hardware, je ne sais pas si ca joue, je developpe sous windows vista avec easyphp, 4go de ram, intel quad core.

Merci.
Dunbar , relis ma réponse et sa question initial , je reste d'avis que mon observation n'est surement pas éloigné de la réalité

(ou alors j'ai pas compris ton smiley , dans ce cas désolé)

Bye Hawk.

Re: taille max d'un array() ?

Posté : 16 sept. 2009, 13:20
par Berzemus
Sauf dans le cas de rainbow tables (table de mot de passe , pour les attaques par dico en md5 par exemple).

Bye hawk
Très juste, il serait assez simple de stocker quelques milliers, millions de mots de passe uniques (avec leur hash) en utilisant une table arc-en-ciel (puisqu'on n'enregistre que le début et la fin d'une chaine, l'entre-deux étant généré).

Re: taille max d'un array() ?

Posté : 16 sept. 2009, 16:04
par dunbar
Bonjour,

J'aimerai savoir combien d'élément max peut contenir un tableau en php ?
Je voudrais en fait :
- générer aléatoirement un mot de passe,
- stocker ce dernier dans un tableau, le but étant d'éviter les doublons, donc je controlerai avec array_key_exist()
- une fois ma boucle fini, j'écris le tout dans un fichier.

Je voudrais en avoir plusieurs millions, est-ce que le tableau et/ou le moteur PHP tiendra le choc ?
Y a t'il d'autres structures de données que je puisse utiliser a part les tableaux ?
Niveau hardware, je ne sais pas si ca joue, je developpe sous windows vista avec easyphp, 4go de ram, intel quad core.

Merci.
Dunbar , relis ma réponse et sa question initial , je reste d'avis que mon observation n'est surement pas éloigné de la réalité

(ou alors j'ai pas compris ton smiley , dans ce cas désolé)

Bye Hawk.
Effectivement mon smiley a été mal compris 'sorry' je ne critiquais pas une réponse j'ai juste voulu donner un avis sans plus :wink: