taille max d'un array() ?

nicoo
Invité n'ayant pas de compte PHPfrance

15 sept. 2009, 01:04

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.

Mammouth du PHP | 985 Messages

15 sept. 2009, 01:15

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:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
AB
ViPHP | 5818 Messages

15 sept. 2009, 02:33

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.

Mammouth du PHP | 985 Messages

15 sept. 2009, 02:46

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...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
AB
ViPHP | 5818 Messages

15 sept. 2009, 03:24

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:
Modifié en dernier par AB le 15 sept. 2009, 03:40, modifié 1 fois.

Mammouth du PHP | 985 Messages

15 sept. 2009, 03:34

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...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
AB
ViPHP | 5818 Messages

15 sept. 2009, 03:46

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

nicoo
Invité n'ayant pas de compte PHPfrance

15 sept. 2009, 08:17

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 :)

ViPHP
ViPHP | 2291 Messages

15 sept. 2009, 17:32

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)
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Mammouth du PHP | 991 Messages

15 sept. 2009, 17:49

Sauf dans le cas de rainbow tables (table de mot de passe , pour les attaques par dico en md5 par exemple).

Bye hawk
DevOps, Symfony4, Hoa

ViPHP
ViPHP | 2291 Messages

15 sept. 2009, 18:15

Sauf dans le cas de rainbow tables (table de mot de passe , pour les attaques par dico en md5 par exemple).

Bye hawk
:-k
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Eléphant du PHP | 224 Messages

16 sept. 2009, 00:28

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 ;)
Fredo d;o)
"Un pas à la fois me suffit..." (Gandhi)

Mammouth du PHP | 991 Messages

16 sept. 2009, 11:40

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.
DevOps, Symfony4, Hoa

ViPHP
ViPHP | 4039 Messages

16 sept. 2009, 13:20

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é).
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

ViPHP
ViPHP | 2291 Messages

16 sept. 2009, 16:04

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:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.