[php] random naam, zoveel mogelijk uniek

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • hobbeldebobbel
  • Registratie: Februari 2001
  • Laatst online: 15-02-2023
heb een vraagje, is er een manier om een geupload plaatje een random bestandsnaam te geven. En dat deze zo goed als uniek is?

ik wil namelijk een plaatje uploaden, en die in een upload dir gooien waar alles instaat....
is ditmogelijk? en hoe?

ik heb zelf bijvoorbeeld wel eens een bestandsnaam gezien welke bestond uit een (groot) aantal letters en cijfers, lijkt me zeer onwaarchijnlijk dat twee van die strings voor kunnenkomen.... weet iemand hoe dit werkt?

hier zou een slimme opmerking kunnen staan
maar die staat er niet


Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 00:18
Ik weet niet waar je mee werkt, maar in php is voor mij de oplossing te werken met een ge unique_id, die md5'en, dat unique_id'en en dat weer md5'en. Beetje omslachtig, maar wel uniek :)

|>


Acties:
  • 0 Henk 'm!

  • Ghost(NL)
  • Registratie: December 2000
  • Niet online
md5 over je filenaam ?

i5-12600K PRIME Z690M-PLUS D4 64GB 980 Pro M.2 1TB  MBA M1 13" 8GB 256GB (Late '20)


Acties:
  • 0 Henk 'm!

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 18-09 18:27

pjvandesande

GC.Collect(head);

Waarom niet de plaatjes nummeren?

Acties:
  • 0 Henk 'm!

Verwijderd

questa schreef op 04 april 2004 @ 20:08:
Waarom niet de plaatjes nummeren?
Omdat hij misschien liever niet heeft dat mensen alle plaatjes gaan binnentrekken?

Maar een unieke md5 string zou goed moeten zijn, zeker als je eerst nog even kijkt of het bestand al bestaat (ook al is de kans heel erg klein).

[ Voor 26% gewijzigd door Verwijderd op 04-04-2004 20:10 ]


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

De beste oplossing; gebruik de volgende manier om een random string te verkrijgen:
PHP:
1
md5(time());
Controleer hierna of dat bestand wellicht bestaat met de functie file_exists; maar dat is inderdaad redelijk onwaarschijnlijk ;)

[ Voor 16% gewijzigd door Spider.007 op 04-04-2004 20:12 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • ATS
  • Registratie: September 2001
  • Laatst online: 18-09 15:14

ATS

Ik gebruik deze functie om een unieke naam te genereren:
PHP:
1
2
3
4
5
6
7
8
9
10
function  RandomFile($pass_len=12) {

                  $allchar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
                    $str = "" ;
                  mt_srand (( double) microtime() * 1000000 );
                  for ( $i = 0; $i<$pass_len ; $i++ )
                  $str .= substr( $allchar, mt_rand (0,51), 1 ) ;
                  return $str ;

        }

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Spider.007: Gebruik dan microtime (), meerdere requests per seconde zijn niet uncommon ;)

verder: www.php.net/uniqid

[ Voor 26% gewijzigd door .oisyn op 04-04-2004 20:17 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • hobbeldebobbel
  • Registratie: Februari 2001
  • Laatst online: 15-02-2023
zo dat zijn veel reacties,
ik probeer ze allemaal te beantwoorden....
ik denk dat ik dat microtime eens ga proberen wat .oisyn vertelde.... dat lijkt me wel een goede oplossing.. en dan met file_exists controleren wat zeer onwaarschijnlijk is :)

thanx


edit: op die laatste link een goede manier gevonden, md5 en unique id gebruiken:

PHP:
1
2
3
<?
$random_name = md5(uniqid(rand(), true));
?>

[ Voor 26% gewijzigd door hobbeldebobbel op 04-04-2004 20:27 ]

hier zou een slimme opmerking kunnen staan
maar die staat er niet


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

.oisyn schreef op 04 april 2004 @ 20:16:
Spider.007: Gebruik dan microtime (), meerdere requests per seconde zijn niet uncommon ;)

verder: www.php.net/uniqid
Als ik een snelle gok mag wagen van het aantal keren dat deze functie aangeroepen gaat worden zou het geen probleem op moeten leveren :P

Je hebt wel gelijk dat microtime beter is; en uniqid inderdaad nog beter; vooral met de LCG vlag; met de geweldige omschrijving
If the optional lcg parameter is TRUE, uniqid() will add additional "combined LCG" entropy at the end of the return value, which should make the results more unique.
Uniek, unieker, uniekst :D

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
wat je kan doen is de naam als volgt opbouwen:

[nummer]_[stukje hash-code].extensie

zo heb je voor jezelf nog wel een ordering, namelijk dat nummer met een underscore en daarachter plak je vervolgens een uniek stukje tekst, zoals hierboven beschreven. Dit maakt het dus onmogelijk om zomaar met een scriptje binnen te halen, maar je houdt toch een mooie ordering :)

Dus bv:

$name = $count + "_" + $random + ".jpg";

[ Voor 7% gewijzigd door chris op 04-04-2004 21:00 ]


Acties:
  • 0 Henk 'm!

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 18-09 18:27

pjvandesande

GC.Collect(head);

Is random() niet een stuk sneller dan de md5()?

Acties:
  • 0 Henk 'm!

  • hobbeldebobbel
  • Registratie: Februari 2001
  • Laatst online: 15-02-2023
mwah ordening is niet nodig .... alles komt straks in een database te staan, die zorgt wel voor de ordening :)

dat lcg... wat is dat? "combined LCG" entropy beetje raar dat het dan opeens nog unieker is...... dat kan dus eigenlij niet, als dat zonder lcg flag ook al uniek is.....

dus: zonder lcg is het niet uniek...... en met lcg is het wel uniek :)
of kan je zeggen dat alle getallen niet uniek zijn?? maar dat het slechts een op de hoeveel miljoen kans heeft om twee keer "getrokken" te worden..... bah wat heb ik een hekel aan statistiek :)

hier zou een slimme opmerking kunnen staan
maar die staat er niet


Acties:
  • 0 Henk 'm!

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 18-09 18:27

pjvandesande

GC.Collect(head);

hobbeldebobbel schreef op 05 april 2004 @ 10:14:
mwah ordening is niet nodig .... alles komt straks in een database te staan, die zorgt wel voor de ordening :)

dat lcg... wat is dat? "combined LCG" entropy beetje raar dat het dan opeens nog unieker is...... dat kan dus eigenlij niet, als dat zonder lcg flag ook al uniek is.....

dus: zonder lcg is het niet uniek...... en met lcg is het wel uniek :)
of kan je zeggen dat alle getallen niet uniek zijn?? maar dat het slechts een op de hoeveel miljoen kans heeft om twee keer "getrokken" te worden..... bah wat heb ik een hekel aan statistiek :)
Zolang jij controleert of de file al bestaat of niet is er niets aan de hand.

edit:
Was het niet zo dat die iniek functies er voor zorgde dat randoms enzo uniek waren?

[ Voor 9% gewijzigd door pjvandesande op 05-04-2004 10:19 ]


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

hobbeldebobbel schreef op 05 april 2004 @ 10:14:
mwah ordening is niet nodig .... alles komt straks in een database te staan, die zorgt wel voor de ordening :)

dat lcg... wat is dat? "combined LCG" entropy beetje raar dat het dan opeens nog unieker is...... dat kan dus eigenlij niet, als dat zonder lcg flag ook al uniek is.....

dus: zonder lcg is het niet uniek...... en met lcg is het wel uniek :)
of kan je zeggen dat alle getallen niet uniek zijn?? maar dat het slechts een op de hoeveel miljoen kans heeft om twee keer "getrokken" te worden..... bah wat heb ik een hekel aan statistiek :)
Op zich wel een interessant punt; je moet even bedenken dat een computer met 1en en 0en werkt. Hij kan niet uitzichzelf besluiten om een 1 of een 0 te generen. Hier is _altijd_ een beslissing op basis van inputgegevens voor nodig. In qBasic werden bijvoorbeeld lijsten met random waardes gegenereerd adhv een bepaalde input, gecombineerd met een bepaald algoritme. Hier kwamen ook altijd dezelfde getallen uit.

Om een beter random getal te verkrijgen werd vaak gebruik gemaakt van deze random functie die als input (bijvoorbeeld) de huidige tijd in microseconden, of de uptime van de computer in microseconden werd gebruikt. Dit is namelijk een getal wat vaak genoeg verandert om echte randomness te veroorzaken.

De beste manier om dus een randomgetal te verkrijgen is het combineren van de huidige tijd met bijvoorbeeld het huidige geheugengebruik, de uptime, het processorgebruik of een ander vaakveranderend getal. Deze trek je door een bepaald algoritme; en voila.. een random getal :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate

Pagina: 1