Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: Satunnaisesti generoitu kuvan nimi

Sivun loppuun

potkis [22.01.2008 17:18:13]

#

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

tsuriga [22.01.2008 17:47:45]

#

<?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.

kayttaja-2791 [22.01.2008 21:17:33]

#

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ä.

potkis [23.01.2008 21:07:41]

#

En aloittelijana tajunnut tosta ylläolevasta. ;/ Tarkmepaa vinkkiä?

ajv [23.01.2008 21:13:28]

#

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

Antti Laaksonen [23.01.2008 21:31:47]

#

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:

<?php

$vanha = "testi.png";
$paate = substr($vanha, strrpos($vanha, ".") + 1);

echo "Kuvan pääte: " . $paate;

?>

peg [23.01.2008 21:52:18]

#

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.

potkis [25.01.2008 17:54:33]

#

Miten tuo aikaleima toimii?

Blaze [25.01.2008 19:12:19]

#

No pegin esimerkissä näyttäisi olevan ihan yyyymmdd_hhmmss
Voit tietysti käyttää vaikka Unix-tyylin leimoja (sekunteja 1.1.1970 lähtien).

potkis [29.01.2008 16:38:48]

#

Onko kellään tarkkaa koodia, miten tuo aikaleima toimii?

Short Php [29.01.2008 17:15:16]

#

<?php
$tiedosto = "kuvanosoite_";
$aikaleima = date("ymd_hms");
$tiedostonnimi = $tiedosto . $aikaleima . ".png";
?>

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta