Eli sivuilleni uploadataan kuvia. Ongelmaksi tulee se, jos on kaksi samannimistä kuvaa. Pitäisi saada siis koodi, joka generoisi kuvalle satunaisen nimen, eikä sitä myöskään tulisi toista kertaa. Kertokaa jso tiedätte. :)
<?php $ip = str_replace( '.', '', $_SERVER[ 'REMOTE_ADDR' ] ); $imageName = substr( str_shuffle( uniqid( md5( $ip ) ) ), 0, 16 ); ?>
Siitäpä soveltaen tarpeisiin ja serverin aikavaatimuksiin suhteuttaen, omalla läppärillä tuo generointi vie vajaan millisekunnin.
Tarkista ennen uploadin lopullista siirtoa temp-hakemistosta että onko kyseisellä nimellä tiedostoa, jos on niin laita nimen perään vaikka juokseva numerointi, ja tee tarkistusta niin kauan että löytyy nimi joka ei ole vielä käytössä.
En aloittelijana tajunnut tosta ylläolevasta. ;/ Tarkmepaa vinkkiä?
Juokseva numero? Pidät vain kirjaa siitä juoksevasta numerosta vaikka tiedostossa. Varmasti uniikki nimi (tai ainakin niin kauan kuin tiedostosi on ehjä ja koodit toimii :))
Edit: jaahas, eli siis kuten JTS tuossa yllä olikin jo ehdottanut... :)
Tässä tulee yksi kuvan nimen arpoja, joka muodostaa 7-numeroisia nimiä. Kuvan nimeksi saattaa tulla vaikka "kuvat/6506896.png". Hakemistoa ja kuvan päätettä on toki helppo muuttaa. Samoin jos lukualue meinaa loppua kesken (epätodennäköistä), voit muuttaa arvottavan luvun ala- ja ylärajaa.
<?php do { $luku = rand(1000000, 9999999); $nimi = "kuvat/" . $luku . ".png"; } while (file_exists($nimi)); echo "Kuvan nimi: " . $nimi; ?>
Yllä oleva koodi vaatii, että tiedoston pääte tunnetaan. Sen saat selville alkuperäisestä kuvan nimestä esim. seuraavalla koodilla:
Miten olisi lisätä nimeen aikaleima joko tallennuksesta tai kuvatiedostosta.
Muuttaa se sitten aikamuotoon.
eli: mopsi_20071224_162512
ja mopsi_20070816_175245
Haulla mopsi löytyy sitten kaikki mopsi kuvat.
Miten tuo aikaleima toimii?
No pegin esimerkissä näyttäisi olevan ihan yyyymmdd_hhmmss
Voit tietysti käyttää vaikka Unix-tyylin leimoja (sekunteja 1.1.1970 lähtien).
Onko kellään tarkkaa koodia, miten tuo aikaleima toimii?
<?php $tiedosto = "kuvanosoite_"; $aikaleima = date("ymd_hms"); $tiedostonnimi = $tiedosto . $aikaleima . ".png"; ?>
Aihe on jo aika vanha, joten et voi enää vastata siihen.