php rename

Pozdravljen!
Imam formo kjer uporabnik naloži tri slike, da se katera od slik ne prepiše zaradi istega imena,bi moral vsako uploadano sliko preimenovati, da ima unique filename.

Problem pa nastane, ker prva uploadana slika, mora ustrezati določeni dolžini, če ne ustreza potem uporabniku napiše sporočilo.

Zaenkrat imam takole in zadeva deluje

if(isset($_POST['submit'])) {
    $target=$_SERVER['DOCUMENT_ROOT']."/slike"; 
    foreach ($_FILES["slika"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["slika"]["tmp_name"][$key];
        $name = $_FILES["slika"]["name"][$key];

        move_uploaded_file($tmp_name, "$target/$name");
        $slika_izdelka = $_FILES["slika"]["name"]["0"];
        list($sirina,$dolzina,$tip,$attr) = getimagesize("$target/$slika_izdelka");             
}
}       

if(!empty($_FILES["slika"]["name"]["0"]) && ($dolzina <= 800)){
    echo "<div class=\"sporocilo_napaka\"><p style=\"text-align: center;\">Dolžina slike je manjša od dovoljene!</p></div>";
                }
if(empty($_FILES["slika"]["name"]["0"])){
    echo "<div class=\"sporocilo_napaka\"><p style=\"text-align: center;\">Niste naložili slike izdelka!</p></div>";
                    }       
if(empty($_FILES["slika"]["name"]["1"])){
    echo "<div class=\"sporocilo_napaka\"><p style=\"text-align: center;\">Niste naložili logotipa podjetja!</p></div>";                       
                    }
if(!empty($_FILES["slika"]["name"]["0"]) && ($dolzina >= 800) && !empty($_FILES["slika"]["name"]["1"])){
    echo "<div class=\"sporocilo_ok\"><p style=\"text-align: center;\">Datoteke uspešno shranjene!</p></div>"; 
                }   
}

Ampak na ta način, slika ki je uploadana ne dobi unique filenamea. Kako bi lahko rešil to, da bi sliko preimenoval dobil path te preimenovane slike in ga primerjal z določeno spremeljivko.

4 odgovori

Poskusi z: moveuploadedfile($tmpname, $target."/".sha1().".".substr($tmpname, strrpos($tmp_name, '.')));

1

schtr4jh, to kar se tiče kreiranja unique namea mi je jasno, nevem pa kako bi lahko potem spravil ta unique filename od $_FILES["slika"]["name"]["0"] v funkcijo getimagesize.

$novoIme = sha1().".".substr($tmpname, strrpos($tmpname, '.'));
moveuploadedfile($tmp_name, $target."/".$novoIme);
list($sirina,$dolzina,$tip,$attr) = getimagesize($target."/".$novoIme);

Spet sfalil rešitev?

21

schtr4jh, hvala mi je uspelo sedaj

$novoIme = $uporabnik."_".sha1(rand() * time()).".".substr($name, strrpos($name, '.') +1);      
        move_uploaded_file($tmp_name, $target."/".$novoIme);
        list($sirina,$dolzina,$tip,$attr) = getimagesize($target."/".$novoIme);
1