Avatar billede dr_demento Nybegynder
11. juli 2005 - 20:37 Der er 24 kommentarer og
1 løsning

ændring af filnavn + thumbnail

Jeg har følgende script, beregnet til upload af billeder. det går også fint, billederne bliver uploadet og dataen bliver gemt i databasen. Men jeg vlle gerne ha at billederne blev omdøbt til værdien $id når de ligger på serveren, og at der yderligere blev lavet en thumbnail af billedet som bliver smidt ind i "produkt/tn". But how? Har rodet med det, men det virker slet ik og er ved at give mig grå hår.

her er scriptet som uploader billedet :

<?
$konfiguration["upload_bibliotek"] = "../produkt/billeder";
$konfiguration["max_stoerrelse"] = "100";

/* Hvor flytter vi fra og til */
$fra = $_FILES["upfil"]["tmp_name"];
$til = $konfiguration["upload_bibliotek"] . "/" . $_FILES["upfil"]["name"];

/* Accepterer vi filens stoerrelse? */

$fil_stoerrelse = filesize($fra)/1024;

if($fil_stoerrelse > $konfiguration["max_stoerrelse"]) {
  die("Desværre - filen er for stor. Jeg accepterer kun " .
      $konfiguration["max_stoerrelse"] . "kb, og din fil fylder " .
      ceil($fil_stoerrelse, 1) . " kb");
}

/* Saa koerer vi */
if(function_exists("move_uploaded_file")) {
  move_uploaded_file($fra, $til);
} else {
  copy($fra, $til);
}


/* smid link til billede i db efter id */

include("db.php");

mysql_connect($Server, $User, $Pass);
mysql_select_db($Database);

$query = "UPDATE items SET itemPicture = '$til' WHERE itemId = '$id'";
mysql_query($query) or die('Error, query failed');


mysql_close();


?>


Og her er det thumbnail script jeg gerne vil ha implementeret:

function resize($cur_dir, $cur_file, $newwidth, $output_dir)
{
  $dir_name = $cur_dir;
  $olddir = getcwd();
  $dir = opendir($dir_name);
  $filename = $cur_file;
  $format='';
  if(preg_match("/.jpg/i", "$filename"))
  {
      $format = 'image/jpeg';
  }
    if($format!='')
  {
      list($width, $height) = getimagesize($filename);
      $newheight=$height*$newwidth/$width;
      switch($format)
      {
          case 'image/jpeg':
          $source = imagecreatefromjpeg($filename);
          break;
      }
      $thumb = imagecreatetruecolor($newwidth,$newheight);
      imagealphablending($thumb, false);
      $source = @imagecreatefromjpeg("$filename");
      imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
      $filename="$output_dir/$filename";
      @imagejpeg($thumb, $filename);
  }
}

resize("../produkt/billeder", "picture_file_name", "width", "../produkt/billeder/tn");



og for en god ordens skyld, fil formen :

<form action="step3done.php" method="post" enctype="multipart/form-data">
  <b>Fil til upload:</b>
<input type=hidden name="id" value="<?php echo"$insert_id"; ?>">
  <input type="file" name="upfil" />
  <input type="submit" value="upload" />
</form>
Avatar billede jaw Nybegynder
11. juli 2005 - 21:27 #1
Det vil sige, at filnavnet skal være $id.den-extension-filen-havde eller $id+filnavn.xxx eller hvordan skal det lige være?
Avatar billede dr_demento Nybegynder
11. juli 2005 - 21:34 #2
billederne skal bare ha navnet $id og thumbnailen $id_tn
Avatar billede jaw Nybegynder
11. juli 2005 - 21:35 #3
Og lige præcis nu, tror jeg at denne linie:

resize("../produkt/billeder", "picture_file_name", "width", "../produkt/billeder/tn");

skal udskiftes med:

resize($konfiguration["upload_bibliotek"], $_FILES["upfil"]["name"], 50, $konfiguration["upload_bibliotek"]."/tn");

Og så burde det vist give lidt resultater...
Avatar billede jaw Nybegynder
11. juli 2005 - 21:35 #4
Ok, og så .jpg ?
Avatar billede jaw Nybegynder
11. juli 2005 - 21:42 #5
Well anyhoo, så er det her .jpg:

$til = $konfiguration["upload_bibliotek"] . "/" . $_FILES["upfil"]["name"];
skal være:
$til = $konfiguration["upload_bibliotek"] . "/" . $id . ".jpg";

og:
resize($konfiguration["upload_bibliotek"], $_FILES["upfil"]["name"], 50, $konfiguration["upload_bibliotek"]."/tn");
skal så være:
resize($konfiguration["upload_bibliotek"], $id.".jpg", 50, $konfiguration["upload_bibliotek"]."/tn");
Avatar billede dr_demento Nybegynder
11. juli 2005 - 21:54 #6
Nu ser scriptet således ud:

<?
$konfiguration["upload_bibliotek"] = "../produkt/billeder";
$konfiguration["max_stoerrelse"] = "100";

/* Hvor flytter vi fra og til */
$fra = $_FILES["upfil"]["tmp_name"];
$til = $konfiguration["upload_bibliotek"] . "/" . $id . ".jpg";

/* Accepterer vi filens stoerrelse? */

$fil_stoerrelse = filesize($fra)/1024;

if($fil_stoerrelse > $konfiguration["max_stoerrelse"]) {
  die("Desværre - filen er for stor. Jeg accepterer kun " .
      $konfiguration["max_stoerrelse"] . "kb, og din fil fylder " .
      ceil($fil_stoerrelse, 1) . " kb");
}

/* Saa koerer vi */
if(function_exists("move_uploaded_file")) {
  move_uploaded_file($fra, $til);
} else {
  copy($fra, $til);
}


/* smid link til billede i db efter id */

include("db.php");

mysql_connect($Server, $User, $Pass);
mysql_select_db($Database);

$query = "UPDATE items SET itemPicture = '$til' WHERE itemId = '$id'";
mysql_query($query) or die('Error, query failed');


mysql_close();


?>

<?

function resize($cur_dir, $cur_file, $newwidth, $output_dir)
{
  $dir_name = $cur_dir;
  $olddir = getcwd();
  $dir = opendir($dir_name);
  $filename = $cur_file;
  $format='';
  if(preg_match("/.jpg/i", "$filename"))
  {
      $format = 'image/jpeg';
  }
    if($format!='')
  {
      list($width, $height) = getimagesize($filename);
      $newheight=$height*$newwidth/$width;
      switch($format)
      {
          case 'image/jpeg':
          $source = imagecreatefromjpeg($filename);
          break;
      }
      $thumb = imagecreatetruecolor($newwidth,$newheight);
      imagealphablending($thumb, false);
      $source = @imagecreatefromjpeg("$filename");
      imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
      $filename="$output_dir/$filename";
      @imagejpeg($thumb, $filename);
  }
}

resize($konfiguration["upload_bibliotek"], $id.".jpg", 50, $konfiguration["upload_bibliotek"]."/tn");


?>

Og jeg får følgende fejl:

Warning: getimagesize(): Unable to access 3.jpg in /hsphere/local/home/ivision/venusbjerget.dk/a/step3done.php on line 58

Warning: getimagesize(3.jpg): failed to open stream: No such file or directory in /hsphere/local/home/ivision/venusbjerget.dk/a/step3done.php on line 58

Warning: Division by zero in /hsphere/local/home/ivision/venusbjerget.dk/a/step3done.php on line 59

Warning: imagecreatefromjpeg(3.jpg): failed to open stream: No such file or directory in /hsphere/local/home/ivision/venusbjerget.dk/a/step3done.php on line 63

Warning: imagecreatetruecolor(): Invalid image dimensions in /hsphere/local/home/ivision/venusbjerget.dk/a/step3done.php on line 66

Warning: imagealphablending(): supplied argument is not a valid Image resource in /hsphere/local/home/ivision/venusbjerget.dk/a/step3done.php on line 67

Warning: imagecopyresized(): supplied argument is not a valid Image resource in /hsphere/local/home/ivision/venusbjerget.dk/a/step3done.php on line 69
Avatar billede jaw Nybegynder
11. juli 2005 - 21:57 #7
Ligger filen 3.jpg på serveren? Og var det en jpg-fil du uploadede?
Avatar billede dr_demento Nybegynder
11. juli 2005 - 22:01 #8
nej, den ligger ik på serveren :(
og ja, det var en jpg
Avatar billede jaw Nybegynder
11. juli 2005 - 22:04 #9
Okey, så sæt lige linien $til tilbage til det originale og prøv igen. Bliver filen så uploadet?
Avatar billede dr_demento Nybegynder
11. juli 2005 - 22:16 #10
Undskyld, jeg ved ik hvad der gik galt før, men nu ligger 3.jpg i /billeder/
(med ovenstående script)

Men intet i /billeder/tn/
Avatar billede jaw Nybegynder
11. juli 2005 - 22:19 #11
Okey, det var da altid noget... Får du stadig samme fejl som du skrev 21:54:17 ?
Avatar billede dr_demento Nybegynder
11. juli 2005 - 22:23 #12
ja, akkurat de samme
Avatar billede jaw Nybegynder
11. juli 2005 - 22:39 #13
Okey, nu ser det ud til at virke:

function resize($cur_dir, $cur_file, $newwidth, $output_dir)
{
  $dir_name = $cur_dir;
  $olddir = getcwd();
  //$dir = opendir($dir_name);
  $filename = $cur_file;
  $format='';
  if(preg_match("/.jpg/i", $filename))
  {
      $format = 'image/jpeg';
  }
    if($format!='')
  {
      list($width, $height) = getimagesize($cur_dir."/".$filename);
      $newheight=$height*$newwidth/$width;
      switch($format)
      {
          case 'image/jpeg':
          $source = imagecreatefromjpeg($cur_dir."/".$filename);
          break;
      }
      $thumb = imagecreatetruecolor($newwidth,$newheight);
      imagealphablending($thumb, false);
      $source = @imagecreatefromjpeg($cur_dir."/".$filename);


      imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
      $filename=$output_dir."/".$filename;
      @imagejpeg($thumb, $filename);
  }
}

resize($konfiguration["upload_bibliotek"], $id.".jpg", 50, $konfiguration["upload_bibliotek"]."/tn");
Avatar billede dr_demento Nybegynder
11. juli 2005 - 22:55 #14
Jeg får ingen errors nu, men desværre uploader den heller ik noget :( hverken i billeder eller tn.

<?
$konfiguration["upload_bibliotek"] = "../produkt/billeder";
$konfiguration["max_stoerrelse"] = "100";

/* Hvor flytter vi fra og til */
$fra = $_FILES["upfil"]["tmp_name"];
$til = $konfiguration["upload_bibliotek"] . "/" . $id . ".jpg";

/* Accepterer vi filens stoerrelse? */

$fil_stoerrelse = filesize($fra)/1024;

if($fil_stoerrelse > $konfiguration["max_stoerrelse"]) {
  die("Desværre - filen er for stor. Jeg accepterer kun " .
      $konfiguration["max_stoerrelse"] . "kb, og din fil fylder " .
      ceil($fil_stoerrelse, 1) . " kb");
}

/* Saa koerer vi */
if(function_exists("move_uploaded_file")) {
  move_uploaded_file($fra, $til);
} else {
  copy($fra, $til);
}


/* smid link til billede i db efter id */

include("db.php");

mysql_connect($Server, $User, $Pass);
mysql_select_db($Database);

$query = "UPDATE items SET itemPicture = '$til' WHERE itemId = '$id'";
mysql_query($query) or die('Error, query failed');


mysql_close();

?>

<?

function resize($cur_dir, $cur_file, $newwidth, $output_dir)
{
  $dir_name = $cur_dir;
  $olddir = getcwd();
  //$dir = opendir($dir_name);
  $filename = $cur_file;
  $format='';
  if(preg_match("/.jpg/i", $filename))
  {
      $format = 'image/jpeg';
  }
    if($format!='')
  {
      list($width, $height) = getimagesize($cur_dir."/".$filename);
      $newheight=$height*$newwidth/$width;
      switch($format)
      {
          case 'image/jpeg':
          $source = imagecreatefromjpeg($cur_dir."/".$filename);
          break;
      }
      $thumb = imagecreatetruecolor($newwidth,$newheight);
      imagealphablending($thumb, false);
      $source = @imagecreatefromjpeg($cur_dir."/".$filename);


      imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
      $filename=$output_dir."/".$filename;
      @imagejpeg($thumb, $filename);
  }
}

resize($konfiguration["upload_bibliotek"], $id.".jpg", 50, $konfiguration["upload_bibliotek"]."/tn");
?>
Avatar billede jaw Nybegynder
11. juli 2005 - 23:10 #15
Uploadingen har vi jo ikke rørt ved, så hvis det virkede før burde det stadig virke...
Avatar billede dr_demento Nybegynder
11. juli 2005 - 23:41 #16
Ja, jeg ved ik hvad der sker for mit webhotel, men nu  virker det igen.
Jeg har indsat din rezize function, den uploader korrekt billedet i produkt/billeder/ med id'en som navn, men ik noget i /tn
Har sat chmod til 777
Avatar billede dr_demento Nybegynder
11. juli 2005 - 23:45 #17
virker det hos dig?
Avatar billede jaw Nybegynder
11. juli 2005 - 23:47 #18
Ja, det med thumbnailet virkede helt fint...
Avatar billede dr_demento Nybegynder
11. juli 2005 - 23:55 #19
kan det ik været noget med at
$dir_name = $cur_dir; ik er sat?
Avatar billede jaw Nybegynder
11. juli 2005 - 23:58 #20
Det er da sat? Fjern lige @'erne i funktionen og se om der sker noget... Du får ellers ingen fejlmeddelelser?
Avatar billede dr_demento Nybegynder
12. juli 2005 - 00:08 #21
Ahh nu virker det! Da jeg fjernede @'erne skete der mirakler. Mange tak jaw! :D

Billeder er godt nok meget små, men det burde være let nok at rette...

Smid et svar og pointene er dine!
Avatar billede jaw Nybegynder
12. juli 2005 - 00:10 #22
Godt så :) Og selv tak...

Størrelsen kan du ændre i resize(blah, blah, 50, blah); <- bare ændre 50, det var bare et tal jeg satte for det nye billedes bredde :)
Avatar billede dr_demento Nybegynder
12. juli 2005 - 00:11 #23
Takker :)
Avatar billede haggar Nybegynder
29. november 2005 - 15:29 #24
Hejsa..

Har testet denne kode og i starten virkede det også med at lægge op, men den tjekkede ikke på filstørrelse og når den er over 2048 Kb så kører den ikke uploadfunktionen.
Hvordan virker den resize funktion? har sat den til slut men funktionen syntes jeg ikke bliver kaldt nogen steder??

Uploader jeg filer under 2048 virker det fint bare ikke over. og den kommer ikke med nogen fejlmeddelse, den kører bare uploadfunktionen uanset hvad.. hmm

Er lidt newbie så håber I bærer over med mig :)

Min kode

<?
$konfiguration["upload_bibliotek"] = "dvd";
$konfiguration["max_stoerrelse"] = "2048";


/* Check PHP-version */
list($major, $minor, $rev) = explode(".", phpversion());
if($major < 4) {
  die("Jeg kan kun arbejde med PHP 4.0.0 eller derover");
}

/* Skab de "moderne" arrays hvis vi arbejder med en aeldre PHP */
if($minor < 1) {
  $_FILES = $HTTP_POST_FILES;
  $_POST = $HTTP_POST_VARS;
  $_SERVER = $HTTP_SERVER_VARS;
}

/* Hvor flytter vi fra og til */
$fra = $_FILES["upfil"]["tmp_name"];
$til = $konfiguration["upload_bibliotek"] . "/" . $_FILES["upfil"]["name"];

/* Accepterer vi filens stoerrelse? */

$fil_stoerrelse = filesize($fra)/1024;

if($fil_stoerrelse > $konfiguration["max_stoerrelse"]) {
  echo ("Desværre - filen er for stor. Jeg accepterer kun " .
  $konfiguration["max_stoerrelse"] . "kb, og din fil fylder " .
  ceil($fil_stoerrelse, 1) . " kb");
}
else{
    if (file_exists($konfiguration["upload_bibliotek"] . "/" . $_FILES["upfil"]["name"])) {
        header ("Location: ../covereksistererallerede.php");
    }
    else{
    /* Saa koerer vi */
        if(function_exists("move_uploaded_file")) {
          move_uploaded_file($fra, $til);
        } else {
          copy($fra, $til);
        }
        header ("Location: takforcover.php");
    }
}


function resize($cur_dir, $cur_file, $newwidth, $output_dir)
{
  $dir_name = $cur_dir;
  $olddir = getcwd();
  //$dir = opendir($dir_name);
  $filename = $cur_file;
  $format='';
  if(preg_match("/.jpg/i", $filename))
  {
      $format = 'image/jpeg';
  }
    if($format!='')
  {
      list($width, $height) = getimagesize($cur_dir."/".$filename);
      $newheight=$height*$newwidth/$width;
      switch($format)
      {
          case 'image/jpeg':
          $source = imagecreatefromjpeg($cur_dir."/".$filename);
          break;
      }
      $thumb = imagecreatetruecolor($newwidth,$newheight);
      imagealphablending($thumb, false);
      $source = @imagecreatefromjpeg($cur_dir."/".$filename);


      imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
      $filename=$output_dir."/".$filename;
      @imagejpeg($thumb, $filename);
  }
}

resize($konfiguration["upload_bibliotek"], $id.".jpg", 50, $konfiguration["upload_bibliotek"]."/tn");
?>
Avatar billede jaw Nybegynder
29. november 2005 - 15:42 #25
$konfiguration["max_stoerrelse"] = "2048"; <- dette kunne jo nok forklare, hvorfor den ikke accepterer filer over 2048 ? :)
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