Avatar billede supersquirrel Nybegynder
23. juli 2008 - 14:46 Der er 16 kommentarer og
1 løsning

Upload: Lav random navn til billede

Hejsa!

Jeg har dette upload, hvor jeg gerne vil have lavet filnavnet om til et eller andet randomnavn, således at der ikke vil være 2 ens filer i databasen.

Her kommer scriptet:

if($_GET['s'] == "upload"){
    if($_SESSION[brugernavn] != ""){
//SETTINGS
$uploadDir        = 'galleri/upload/'; //Bibliotek, hvor filer uploades til - husk chmod 777
$allowedFileTypes = array('jpg','gif','png'); //Hvilke filer vil vi acceptere bliver uploadet?
$sql = mysql_query("SELECT uploadSize FROM community WHERE brugernavn='$_SESSION[brugernavn]'") or die("Fejl: " . mysql_error());
$size = mysql_fetch_assoc($sql);
$allowedFileSize = $size[uploadSize];

//THUMBS SETTINGS
$thumbDir        = 'galleri/upload/thumbs/'; //Bibliotek, hvor thumbs gemmes - husk chmod 777
$thumbPrefix      = 'thumb_';  //Hvad skal tilføjes til originalt filnavn?
$thumbHeight      = 105;      //Thumb højde
$thumbWidth      = 105;      //Thumb bredde
$thumbQuality    = 100;        //Kvalitet af thumb, kan være fra 0 - dårligt til 100 - bedst

//Funktioner som bruges:
function getExtension($filename){
    return strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );
}

function resize( $filename, $newfilename, $maxw, $maxh, $quality=85 )
{
  $extension = getExtension($filename);
  switch($extension)
  {
    case 'jpeg':
    case 'jpe':
    case 'jpg':
      $srcim = imagecreatefromjpeg( $filename );
      break;
    case 'gif':
      $srcim = imagecreatefromgif( $filename );
      break;
    case 'png':
      $srcim = imagecreatefrompng( $filename );
      break;
    default:
      return false;
  }
  $ow = imagesx( $srcim );
  $oh = imagesy( $srcim );
  $wscale = $maxw / $ow;
  $hscale = $maxh / $oh;
  $scale = min( $hscale, $wscale );
  $nw = round( $ow * $scale, 0 );
  $nh = round( $oh * $scale, 0 );
  $dstim = imagecreatetruecolor( $nw, $nh );
  imagecopyresampled( $dstim, $srcim, 0, 0, 0, 0, $nw, $nh, $ow, $oh );
  switch($extension)
  {
    case 'jpeg':
    case 'jpe':
    case 'jpg':
      imagejpeg( $dstim, $newfilename, $quality );
      break;
    case 'gif':
      imagegif( $dstim, $newfilename );
      break;
    case 'png':
      $png_q = floor( abs( $quality / 10 - 9.9 ) );
      imagepng( $dstim, $newfilename, $png_q );
      break;
    default:
      return false;
  }
  imagedestroy( $dstim );
  imagedestroy( $srcim );
  return file_exists($newfilename);
}

//Er der trykket på Upload file knappen?
if(isset($_POST['myUpload']))
{
  //Har vi en fil?
  if(is_uploaded_file($_FILES['myFile']['tmp_name']))
  {
    //Filendelse
    $extension = getExtension($_FILES['myFile']['name']);
   
    //Er filen en af de filer vi gerne vil have?
    if(in_array($extension,$allowedFileTypes))
    {
        //Er filen lille nok?
        $fileSize = $_FILES['myFile']['size'] / 1000;
        if($fileSize <= $allowedFileSize)
        {
          //Vi flytter filen fra tmp til vores UPLOADDIR
          if(move_uploaded_file($_FILES['myFile']['tmp_name'],$uploadDir . basename($_FILES['myFile']['name'])))
          {
              if(resize($uploadDir . basename($_FILES['myFile']['name']), $thumbDir . $thumbPrefix . basename($_FILES['myFile']['name']), $thumbWidth, $thumbHeight, $thumbQuality)){
                  echo '<h3 style="color:green;">File ('.basename($_FILES['myFile']['name']).') uploaded and resized succesfully</h3>';
                  $uri = $_FILES['myFile']['name'];
                    $uri=str_replace("æ","",$uri);
                    $uri=str_replace("ø","",$uri);
                    $uri=str_replace("å","",$uri);
                    $uri=str_replace("Æ","",$uri);
                    $uri=str_replace("Ø","",$uri);
                    $uri=str_replace("Å","",$uri);   
                    $beskrivelse = mysql_real_escape_string($_POST["beskrivelse"]);                     
                  mysql_query("INSERT INTO galleri (brugernavn, kategori, uri, beskrivelse, dato, ip) VALUES ('$_SESSION[brugernavn]','$_POST[kategori]','$uri','$beskrivelse','$date','$ip')") or die("Fejl: " . mysql_error());
              }else{
                echo '<h3 style="color:red;">File ('.basename($_FILES['myFile']['name']).') uploaded succesfully, but resize failed</h3>';
            }
          }
          else
          {
            echo "<script>window.alert('Fejl - Kunne ikke uploade filen: ".basename($_FILES['myFile']['name'])."'); document.location.href='?p=galleri&site=upload';</script>";
          }
        }
        else
        {
            echo "<script>window.alert('Fejl - filen er for stor! Max størrelse: ".$allowedFileSize."'); document.location.href='?p=galleri&site=upload';</script>";     
        }
      }
    else
    {
        echo "<script>window.alert('Forkert filtype, tilladte filtyper er: jpg, png og gif'); document.location.href='?p=galleri&site=upload';</script>";
    }
  }
  else
  {
      echo "<script>window.alert('Ingen fil valgt'); document.location.href='?p=galleri&site=upload';</script>";
  }
}
}else{
    echo "<script>window.alert('Fyfyfyfyfyfyfy ;)))'); document.location.href='?p=galleri&site=upload';</script>";
}}
?>
Avatar billede jakobdo Ekspert
23. juli 2008 - 15:10 #1
Kig på funktionen: http://dk.php.net/uniqid
og brug den her output her:
basename($_FILES['myFile']['name'])
i denne linje:
if(resize($uploadDir . basename($_FILES['myFile']['name']), $thumbDir . $thumbPrefix . basename($_FILES['myFile']['name']), $thumbWidth, $thumbHeight, $thumbQuality)){
Avatar billede supersquirrel Nybegynder
23. juli 2008 - 15:29 #2
$newname = md5(uniqid(rand(), true));
if(resize($uploadDir . $newname, $thumbDir . $thumbPrefix . $newname, $thumbWidth, $thumbHeight, $thumbQuality)){

Sådan?
Avatar billede jakobdo Ekspert
23. juli 2008 - 15:50 #3
Ja, du mangler så bare stadig filens endelse.
Avatar billede supersquirrel Nybegynder
23. juli 2008 - 15:52 #4
if(resize($uploadDir . $newname.".".$extension, $thumbDir . $thumbPrefix . $newname.".".$extension, $thumbWidth, $thumbHeight, $thumbQuality)){

Like that?
Avatar billede supersquirrel Nybegynder
23. juli 2008 - 16:10 #5
Jeg kan i hvert fald sige at det ikke virker.
Hvis jeg gør det på den måde jeg lige skrev, kommer den med ALLE de fejl der overhovedet kan være..
Avatar billede olebole Juniormester
23. juli 2008 - 16:33 #6
<ole>

Hvis du har et id-felt med auto-increment i tabellen 'galleri', har du jo allerede et unikt navn dér. Det er bare at bruge det  ;o)

/mvh
</bole>
Avatar billede jakobdo Ekspert
23. juli 2008 - 18:24 #7
Sorry...
Du skal selvfølgelig ikke rette første del...
Du skal rette på: $thumbDir . $thumbPrefix . basename($_FILES['myFile']['name'])

Så hvis du kalder med:
$newname = md5(uniqid(rand(), true));
if(resize($uploadDir . basename($_FILES['myFile']['name']), $thumbDir . $thumbPrefix . $newname . '.' . $extension, $thumbWidth, $thumbHeight, $thumbQuality)){

Så burde det virke.
Avatar billede supersquirrel Nybegynder
23. juli 2008 - 19:28 #8
Olebole > Jeg vil gerne have et unikt billedenavn fordi at hvis jeg skal slette et billede, sletter den alle billeder med præcis det navn.

Jakobdo > Det virker nogenlunde. Nu laver den thumb billede navnet om. Det skulle helst være både det rigtige billede OG thumb billde der skal laves om.
Kan det lade sig gøre?
Avatar billede coderdk Praktikant
23. juli 2008 - 21:01 #9
supersquirrel, Olebole har en pointe. Hvis hver post kun kan have ét billede, og du lader billedets navn være postens ID, så *er* det unikt :P
Avatar billede jakobdo Ekspert
23. juli 2008 - 21:09 #10
Så skal du også rette dette sted:

if(move_uploaded_file($_FILES['myFile']['tmp_name'],$uploadDir . basename($_FILES['myFile']['name'])))
          {
Avatar billede supersquirrel Nybegynder
23. juli 2008 - 21:29 #11
Smukt - det virker helt perfekt - smid et svar og du skal få point
Avatar billede supersquirrel Nybegynder
23. juli 2008 - 21:41 #12
Hov! Der var jeg for hurtig! Den virker åbenbart ikke alligevel.

          //Vi flytter filen fra tmp til vores UPLOADDIR
              $newname = md5(uniqid(rand(), true));
                    if(move_uploaded_file($_FILES['myFile']['tmp_name'],$uploadDir . $newname . '.' . $extension))
          {
                if(resize($uploadDir . basename($_FILES['myFile']['name']), $thumbDir . $thumbPrefix . $newname . '.' . $extension, $thumbWidth, $thumbHeight, $thumbQuality)){
                  echo '<h3 style="color:green;">File ('.basename($_FILES['myFile']['name']).') uploaded and resized succesfully</h3>';
                  $uri = $_FILES['myFile']['name'];
                    $uri=str_replace("æ","",$uri);
                    $uri=str_replace("ø","",$uri);
                    $uri=str_replace("å","",$uri);
                    $uri=str_replace("Æ","",$uri);
                    $uri=str_replace("Ø","",$uri);
                    $uri=str_replace("Å","",$uri);   
                    $beskrivelse = mysql_real_escape_string($_POST["beskrivelse"]);                     
                  mysql_query("INSERT INTO galleri (brugernavn, kategori, uri, beskrivelse, dato, ip) VALUES ('$_SESSION[brugernavn]','$_POST[kategori]','$newname.$extension','$beskrivelse','$date','$ip')") or die("Fejl: " . mysql_error());
   
Den giver alle de fejl den kan nu
Avatar billede jakobdo Ekspert
23. juli 2008 - 21:56 #13
Så skal du også rette her:
if(resize($uploadDir . basename($_FILES['myFile']['name'])
Avatar billede olebole Juniormester
23. juli 2008 - 23:41 #14
Jeg prøver lige igen:

Hvis du i tabellen 'galleri' har et auto-increment felt (som oftest kaldt 'id'), har du allerede et unikt navn til filen. Som du ser på coderdk's kommentar, har han forstået idéen og er enig.

Løsningen er i øvrigt yderst udbredt - og ja, jeg har fuldstændig styr på, hvad du mener og ønsker  ;o)
Avatar billede supersquirrel Nybegynder
24. juli 2008 - 00:35 #15
jakobdo > SÅ! nu virker det :)) Smid et svar, og du får dine point ;o)
olebole > Jeg kan godt se at i gerne vil have mig til at kalde mine filer, deres unikke id som de har i databasen. Men forstår ikke meningen i at kalde en fil "1.jpg, 2.jpg - thumb_1.jpg, thumb_2.jpg" osv.
Avatar billede jakobdo Ekspert
24. juli 2008 - 06:58 #16
supersquirrel: om filen hedder 1.jpg, 2.jpg eller
dsa732hhdsa732dsa7327dsah2.jpg er jo lige fedt...
Men du får et svar.
Avatar billede jakobdo Ekspert
24. juli 2008 - 20:45 #17
Takker for point.
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