Avatar billede i-jinx-u Nybegynder
30. oktober 2009 - 21:29 Der er 10 kommentarer

Php upload script med navneskift

Hej folk..

Jeg fandt dette script og modificeret det til mine behov..


<?php
error_reporting(0);

$change="";
$abc="";


define ("MAX_SIZE","400");
function getExtension($str) {
        $i = strrpos($str,".");
        if (!$i) { return ""; }
        $l = strlen($str) - $i;
        $ext = substr($str,$i+1,$l);
        return $ext;
}

$errors=0;
 
if($_SERVER["REQUEST_METHOD"] == "POST")
{
    $image =$_FILES["file"]["name"];
    $uploadedfile = $_FILES['file']['tmp_name'];
   

    if ($image)
    {
   
        $filename = stripslashes($_FILES['file']['name']);
   
          $extension = getExtension($filename);
        $extension = strtolower($extension);
       
       
if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif"))
        {
       
            $change='<div class="msgdiv">Ukendt fil format.<br /><br /></div> ';
            $errors=1;
        }
        else
        {

$size=filesize($_FILES['file']['tmp_name']);


if ($size > MAX_SIZE*1024)
{
    $change='<div class="msgdiv">Du har overskredet fil størrelsen!<br /><br /></div> ';
    $errors=1;
}


if($extension=="jpg" || $extension=="jpeg" )
{
$uploadedfile = $_FILES['file']['tmp_name'];
$src = imagecreatefromjpeg($uploadedfile);

}
else if($extension=="png")
{
$uploadedfile = $_FILES['file']['tmp_name'];
$src = imagecreatefrompng($uploadedfile);

}
else
{
$src = imagecreatefromgif($uploadedfile);
}

echo $scr;

list($width,$height)=getimagesize($uploadedfile);


$newwidth=400;
$newheight=($height/$width)*$newwidth;
$tmp=imagecreatetruecolor($newwidth,$newheight);


$newwidth1=193;
$newheight1=143;
$tmp1=imagecreatetruecolor($newwidth1,$newheight1);

imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);

imagecopyresampled($tmp1,$src,0,0,0,0,$newwidth1,$newheight1,$width,$height);


$filename = "user_imgs/". $_FILES['file']['name'];

$filename1 = "user_imgs/thumbs/small". $_FILES['file']['name'];



imagejpeg($tmp,$filename,100);

imagejpeg($tmp1,$filename1,100);

imagedestroy($src);
imagedestroy($tmp);
imagedestroy($tmp1);
}}

}

//If no errors registred, print the success message
if(isset($_POST['Submit']) && !$errors)
{

  // mysql_query("update {$prefix}users set img='$big',img_small='$small' where user_id='$user'");
    $change=' <div class="msgdiv">Billedet blev uploadet succesfuldt!<br /><br /></div>';
}

?>


Mit problem er nu bare at, når der er blevet uploadet to forskellige billeder, men har samme filnavn så overwriter det ene det andet billede..

Nogen der har et bud på hvordan jeg genererer nogen random navne til mine uploadede billeder så der ikke findes 2 med det samme navn?

Tak på forhånd.
Avatar billede mbm2016 Nybegynder
30. oktober 2009 - 21:51 #1
Kunne du ikke bare bruge rand funktionen:


<?php
error_reporting(0);

$change="";
$abc="";


define ("MAX_SIZE","400");
function getExtension($str) {
        $i = strrpos($str,".");
        if (!$i) { return ""; }
        $l = strlen($str) - $i;
        $ext = substr($str,$i+1,$l);
        return $ext;
}

$errors=0;
 
if($_SERVER["REQUEST_METHOD"] == "POST")
{
    $image =$_FILES["file"]["name"];
    $uploadedfile = $_FILES['file']['tmp_name'];
   

    if ($image)
    {
   
        $filename = stripslashes($_FILES['file']['name']);
   
          $extension = getExtension($filename);
        $extension = strtolower($extension);
       
       
if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif"))
        {
       
            $change='<div class="msgdiv">Ukendt fil format.<br /><br /></div> ';
            $errors=1;
        }
        else
        {

$size=filesize($_FILES['file']['tmp_name']);


if ($size > MAX_SIZE*1024)
{
    $change='<div class="msgdiv">Du har overskredet fil størrelsen!<br /><br /></div> ';
    $errors=1;
}


if($extension=="jpg" || $extension=="jpeg" )
{
$uploadedfile = $_FILES['file']['tmp_name'];
$src = imagecreatefromjpeg($uploadedfile);

}
else if($extension=="png")
{
$uploadedfile = $_FILES['file']['tmp_name'];
$src = imagecreatefrompng($uploadedfile);

}
else
{
$src = imagecreatefromgif($uploadedfile);
}

echo $scr;

list($width,$height)=getimagesize($uploadedfile);


$newwidth=400;
$newheight=($height/$width)*$newwidth;
$tmp=imagecreatetruecolor($newwidth,$newheight);


$newwidth1=193;
$newheight1=143;
$tmp1=imagecreatetruecolor($newwidth1,$newheight1);

imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);

imagecopyresampled($tmp1,$src,0,0,0,0,$newwidth1,$newheight1,$width,$height);


$filename = "user_imgs/" . rand(0,999) . $_FILES['file']['name'];

$filename1 = "user_imgs/thumbs/small" . rand(0,999) . $_FILES['file']['name'];



imagejpeg($tmp,$filename,100);

imagejpeg($tmp1,$filename1,100);

imagedestroy($src);
imagedestroy($tmp);
imagedestroy($tmp1);
}}

}

//If no errors registred, print the success message
if(isset($_POST['Submit']) && !$errors)
{

  // mysql_query("update {$prefix}users set img='$big',img_small='$small' where user_id='$user'");
    $change=' <div class="msgdiv">Billedet blev uploadet succesfuldt!<br /><br /></div>';
}

?>

Avatar billede i-jinx-u Nybegynder
30. oktober 2009 - 21:56 #2
Hold da op, skulle der ikke mere til? Men når man ikke ved det, så det jo klart..

Det takker jeg virkelig mange gange for :-) Svar for point..
Avatar billede Slettet bruger
30. oktober 2009 - 22:01 #3
Der findes en funktion som netop er beregnet til det: unique(prefix)

Den leverer et garanteret unikt filnavn
- og samtidig slipper du for "mystiske" tegn i de uploadede filnavne

.
..
...
$filename = "user_imgs/". $_FILES['file']['name'];
$filename1 = "user_imgs/thumbs/small". $_FILES['file']['name'];
...
..
.
=>
.
..
...
$unik = uniqid('hiphip');
$filename = "user_imgs/$unik.$extension";
$filename1 = "user_imgs/thumbs/small/$unik.$extension";
...
..
.
Avatar billede Slettet bruger
30. oktober 2009 - 22:05 #4
Hov, jeg ser nu at begge versioner er jpg uanset hvad der uploades, så:

$unik = uniqid('hiphip');
$filename = "user_imgs/$unik.jpg";
$filename1 = "user_imgs/thumbs/small/$unik.jpg";
Avatar billede i-jinx-u Nybegynder
30. oktober 2009 - 22:07 #5
Okay, tak T4NK3R - jeg prøver det lige, så vender jeg tilbage :-)
Avatar billede i-jinx-u Nybegynder
30. oktober 2009 - 22:15 #6
Med det du har skrevet så bliver et billede gemt feks. således:

hiphip4aeb56e55219f.jpgmig.jpg
Avatar billede i-jinx-u Nybegynder
30. oktober 2009 - 22:17 #7
Men så var det bare at


$unik = uniqid('hiphip');

$filename = "user_imgs/$unik". $_FILES['file']['name'];

$filename1 = "user_imgs/thumbs/small$unik". $_FILES['file']['name'];


Ikke?
Avatar billede Slettet bruger
30. oktober 2009 - 22:59 #8
Det er bedst at slippe for $_FILES['file']['name'] i det endelige navn...
- Der kan være specielle tegn i, som giver problemer på tværs af landegrænser.
- Og de kan være meget lange eller "ondskabsfulde" (buffer-overflow osv)

Eksperimentér lidt mere med det - det KAN virke : )

mere info => http://dk2.php.net/manual/en/function.uniqid.php
Avatar billede i-jinx-u Nybegynder
30. oktober 2009 - 23:52 #9
Mange tak, det sætter jeg stor pris på! :-)
Avatar billede mbm2016 Nybegynder
04. november 2009 - 20:08 #10
Hehh, her er et svar i hvert fald ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester