Avatar billede svjensen Nybegynder
29. oktober 2003 - 12:45 Der er 9 kommentarer og
1 løsning

Problem med rename af fil og automatisk thumb ved upload

Jeg bruger følgende script til at rename, uploade og lave en automatisk thumb af et billede:

///////////// SCRIPT START /////////////////////
<?php
include("connection.php");

$updir = $_SERVER["DOCUMENT_ROOT"]."/test/upload";  // Definer stien til dit oploadbibliotek
$aft = array('image/jpeg','image/pjpeg','image/png'); // De filtyper der kan uploades

/*
    Function checkgd()
    checks the version of gd, and returns "yes" when it's higher than 2
*/
function checkgd(){
    $gd2="";
    ob_start();
    phpinfo(8);
    $phpinfo=ob_get_contents();
    ob_end_clean();
    $phpinfo=strip_tags($phpinfo);
    $phpinfo=stristr($phpinfo,"gd version");
    $phpinfo=stristr($phpinfo,"version");
    preg_match('/\d/',$phpinfo,$gd);
    if ($gd[0]=='2'){$gd2="yes";}
    return $gd2;
}

/*
    Function ditchtn($arr,$thumbname)
    filters out thumbnails
*/
function ditchtn($arr,$thumbname){
    foreach ($arr as $item){
        if (!preg_match("/^".$thumbname."/",$item)){$tmparr[]=$item;}
    }
    return $tmparr;
}

/*
    Function createthumb($name,$filename,$new_w,$new_h)
    creates a resized image
    variables:
    $name        Original filename
    $filename    Filename of the resized image
    $new_w        width of resized image
    $new_h        height of resized image
*/   
function createthumb($name,$filename,$new_w,$new_h){
    global $gd2;
    $system=explode(".",$name);
    echo $name." :name<br />";
    echo $system[4]." :system[4]<br />";

    if (preg_match("/jpg|jpeg/",$system[4])){$src_img=imagecreatefromjpeg($name);}
    if (preg_match("/png/",$system[4])){$src_img=imagecreatefrompng($name);}
    $old_x=imageSX($src_img);
    $old_y=imageSY($src_img);
    if ($old_x > $old_y) {
        $thumb_w=$new_w;
        $thumb_h=$old_y*($new_h/$old_x);
    }
    if ($old_x < $old_y) {
        $thumb_w=$old_x*($new_w/$old_y);
        $thumb_h=$new_h;
    }
    if ($old_x == $old_y) {
        $thumb_w=$new_w;
        $thumb_h=$new_h;
    }
    if ($gd2==""){
        $dst_img=ImageCreate($thumb_w,$thumb_h);
        imagecopyresized($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y);
    }else{
        $dst_img=ImageCreateTrueColor($thumb_w,$thumb_h);
        imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y);
    }
    if (preg_match("/png/",$system[1])){
        imagepng($dst_img,$filename);
    } else {
        imagejpeg($dst_img,$filename);
    }
    imagedestroy($dst_img);
    imagedestroy($src_img);
}

/*
        Function directory($directory,$filters)
        reads the content of $directory, takes the files that apply to $filter
        and returns an array of the filenames.
        You can specify which files to read, for example
        $files = directory(".","jpg,gif");
                gets all jpg and gif files in this directory.
        $files = directory(".","all");
                gets all files.
*/
function directory($dir,$filters){
    $handle=opendir($dir);
    $files=array();
    if ($filters == "all"){while(($file = readdir($handle))!==false){$files[] = $file;}}
    if ($filters != "all"){
        $filters=explode(",",$filters);
        while (($file = readdir($handle))!==false) {
            for ($f=0;$f<sizeof($filters);$f++):
                $system=explode(".",$file);
                if ($system[1] == $filters[$f]){$files[] = $file;}
            endfor;
        }
    }
    closedir($handle);
    return $files;
}

?>
<html>
<head>
<title>Untitled Document</title>
<link href="scroll.css" type="text/css" rel="stylesheet">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#D0D0D0" text="#000000">
<font face="Verdana, Arial, Helvetica, sans-serif" size="2">upload</font>
<br><br>
<?php

if (isset($_GET['mode']) && $_GET['mode'] == "upload") {
  $galleri = $_POST['ddgalleri'];
  $newfilename = $updir."/".$galleri."_".$_FILES['fil']['name'];
  echo $newfilename." :newfilename<br />";

    if (empty($_REQUEST['fil'])) {
        echo "Du skal vælge en fil";
    }
    else {

      if (in_array($_FILES['fil']['type'],$aft)) {
      if (move_uploaded_file($_FILES['fil']['tmp_name'], $newfilename)) {
        $gd2=checkgd();
        createthumb($newfilename,$updir."/"."thumb_".$newfilename,100,100);

        $imginfo = getimagesize($newfilename);
        $imgwidth = $imginfo[0];  //bredde i pixels
        $imgheight = $imginfo[1]; //højde i pixels
        $imgtype = $imginfo[2];  //jpg, gif, bmp osv
        $imghtml = $imginfo[3];  //height="yyy" width="xxx" - for use directly in html
            Echo "Alt OK<br />";
            Echo $_REQUEST['tekst'];
            }
            else {}
        }
        else {
              echo "Filtypen er ikke korrekt!";
        }   
    }

}

elseif (empty($_GET['mode'])) {
    ?>

    <form action="test3.php?mode=upload" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="100000">
    <?php
    $res = mysql_query("SELECT * FROM gallerier");
    echo "<select name=ddgalleri size=1>";
    while($row = mysql_fetch_array($res)) {
    echo "<option value=".$row["galleriid"].">".$row["galleri"]."</option>";
    }
    echo "</select><br />";

    mysql_close();
    ?>
    <input type="file" name="fil"><br />
    <input type="text" name="tekst">
    <br /><br />
    <input type="submit" name="submit" value="Upload" >
    </form>

    <?php

}
else {
    echo "Bad guy!";
}
?>

</body>
</html>
////////////// SCRIPT SLUT /////////////////////

Fejlmeddelelse:
/customers/silkeborgbasketball.dk/silkeborgbasketball.dk/httpd.www/test/upload/1_Vinter.jpg :newfilename
/customers/silkeborgbasketball.dk/silkeborgbasketball.dk/httpd.www/test/upload/1_Vinter.jpg :name
jpg :system[4]

Warning: imagejpeg: unable to open '/customers/silkeborgbasketball.dk/silkeborgbasketball.dk/httpd.www/test/upload/thumb_/customers/silkeborgbasketball.dk/silkeborgbasketball.dk/httpd.www/test/upload/1_Vinter.jpg' for writing in /customers/silkeborgbasketball.dk/silkeborgbasketball.dk/httpd.www/test/test3.php on line 77
Alt OK

What to do?
Avatar billede ohmish Nybegynder
29. oktober 2003 - 12:55 #1
der er noget knas med stien

customers/silkeborgbasketball.dk/silkeborgbasketball.dk/httpd.www/test/upload/thumb_/customers/silkeborgbasketball.dk/silkeborgbasketball.dk/httpd.www/test/upload/1_Vinter.jpg
Avatar billede ohmish Nybegynder
29. oktober 2003 - 12:57 #2
findes mappen "thumb_" i uploadmappen?
Avatar billede ohmish Nybegynder
29. oktober 2003 - 13:00 #3
man kan åbne
http://silkeborgbasketball.dk/test/
men ikke
http://silkeborgbasketball.dk/httpd.www/test/
i browseren

er det din egen server?
Avatar billede svjensen Nybegynder
29. oktober 2003 - 13:07 #4
For lige at tage det hele fra starten:

I mit oprindelige script uploadede jeg filen med sit originale navn. I det tilfælde var
  $newfilename = $updir."/".$_FILES['fil']['name'];
og jeg lavede min thumb med følgende kald:
  createthumb($_FILES['fil']['name'],$updir."/"."thumb_".$_FILES['fil']['name'],100,100);

Det virkede uden problemer.

Det jeg gerne vil er, at rename den til "$galleri_filnavn" (fx'1_billede.jpg'), hvilket jeg godt kan gøre. Men når jeg så prøver at lave min thumb går det galt, som du kan se.

Stien du henviser til kommer af:
  $updir."/"."thumb_".$newfilename
hvor jeg prøver at fortælle scriptet at jeg ønsker at få min thumb navngivet 'thumb_filnavn' (fx 'thumb_1_billede.jpg')

Så, nej, biblioteket 'thumb_' findes ikke.
Avatar billede svjensen Nybegynder
29. oktober 2003 - 13:08 #5
Nej serveren er hos b-one.
Jeg ved ikke hvor http://silkeborgbasketball.dk/httpd.www/test/ kommer fra.
Avatar billede ohmish Nybegynder
29. oktober 2003 - 14:40 #6
hmm.. den er svær at se. af en eller anden grund tror scriptet at thumb_ er en mappe. måske er der et / for meget, eller $updir sættes forkert eller en gang for meget..

jeg gætter på det har noget at gøre med

$newfilename = $updir."/".$_FILES['fil']['name'];

som hellere sku være:

$newfilename = $_FILES['fil']['name'];
Avatar billede ohmish Nybegynder
29. oktober 2003 - 14:45 #7
aaah!

prøv med
$thumbgal = "thumb_".$
createthumb($newfilename, $updir."/"."thumb_".$newthumbname,100,100);


///////////// SCRIPT START /////////////////////
<?php
include("connection.php");

$updir = $_SERVER["DOCUMENT_ROOT"]."/test/upload";  // Definer stien til dit oploadbibliotek
$aft = array('image/jpeg','image/pjpeg','image/png'); // De filtyper der kan uploades

/*
    Function checkgd()
    checks the version of gd, and returns "yes" when it's higher than 2
*/
function checkgd(){
    $gd2="";
    ob_start();
    phpinfo(8);
    $phpinfo=ob_get_contents();
    ob_end_clean();
    $phpinfo=strip_tags($phpinfo);
    $phpinfo=stristr($phpinfo,"gd version");
    $phpinfo=stristr($phpinfo,"version");
    preg_match('/\d/',$phpinfo,$gd);
    if ($gd[0]=='2'){$gd2="yes";}
    return $gd2;
}

/*
    Function ditchtn($arr,$thumbname)
    filters out thumbnails
*/
function ditchtn($arr,$thumbname){
    foreach ($arr as $item){
        if (!preg_match("/^".$thumbname."/",$item)){$tmparr[]=$item;}
    }
    return $tmparr;
}

/*
    Function createthumb($name,$filename,$new_w,$new_h)
    creates a resized image
    variables:
    $name        Original filename
    $filename    Filename of the resized image
    $new_w        width of resized image
    $new_h        height of resized image
*/   
function createthumb($name,$filename,$new_w,$new_h){
    global $gd2;
    $system=explode(".",$name);
    echo $name." :name<br />";
    echo $system[4]." :system[4]<br />";

    if (preg_match("/jpg|jpeg/",$system[4])){$src_img=imagecreatefromjpeg($name);}
    if (preg_match("/png/",$system[4])){$src_img=imagecreatefrompng($name);}
    $old_x=imageSX($src_img);
    $old_y=imageSY($src_img);
    if ($old_x > $old_y) {
        $thumb_w=$new_w;
        $thumb_h=$old_y*($new_h/$old_x);
    }
    if ($old_x < $old_y) {
        $thumb_w=$old_x*($new_w/$old_y);
        $thumb_h=$new_h;
    }
    if ($old_x == $old_y) {
        $thumb_w=$new_w;
        $thumb_h=$new_h;
    }
    if ($gd2==""){
        $dst_img=ImageCreate($thumb_w,$thumb_h);
        imagecopyresized($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y);
    }else{
        $dst_img=ImageCreateTrueColor($thumb_w,$thumb_h);
        imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y);
    }
    if (preg_match("/png/",$system[1])){
        imagepng($dst_img,$filename);
    } else {
        imagejpeg($dst_img,$filename);
    }
    imagedestroy($dst_img);
    imagedestroy($src_img);
}

/*
        Function directory($directory,$filters)
        reads the content of $directory, takes the files that apply to $filter
        and returns an array of the filenames.
        You can specify which files to read, for example
        $files = directory(".","jpg,gif");
                gets all jpg and gif files in this directory.
        $files = directory(".","all");
                gets all files.
*/
function directory($dir,$filters){
    $handle=opendir($dir);
    $files=array();
    if ($filters == "all"){while(($file = readdir($handle))!==false){$files[] = $file;}}
    if ($filters != "all"){
        $filters=explode(",",$filters);
        while (($file = readdir($handle))!==false) {
            for ($f=0;$f<sizeof($filters);$f++):
                $system=explode(".",$file);
                if ($system[1] == $filters[$f]){$files[] = $file;}
            endfor;
        }
    }
    closedir($handle);
    return $files;
}

?>
<html>
<head>
<title>Untitled Document</title>
<link href="scroll.css" type="text/css" rel="stylesheet">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#D0D0D0" text="#000000">
<font face="Verdana, Arial, Helvetica, sans-serif" size="2">upload</font>
<br><br>
<?php

if (isset($_GET['mode']) && $_GET['mode'] == "upload") {
  $galleri = $_POST['ddgalleri'];
  $newfilename = $updir."/".$galleri."_".$_FILES['fil']['name'];
$newthumb = $updir."/".$galleri."_thumb_".$_FILES['fil']['name'];
  echo $newfilename." :newfilename<br />";

    if (empty($_REQUEST['fil'])) {
        echo "Du skal vælge en fil";
    }
    else {

      if (in_array($_FILES['fil']['type'],$aft)) {
      if (move_uploaded_file($_FILES['fil']['tmp_name'], $newfilename)) {
        $gd2=checkgd();
        createthumb($newfilename, $newthumb,100,100);

        $imginfo = getimagesize($newfilename);
        $imgwidth = $imginfo[0];  //bredde i pixels
        $imgheight = $imginfo[1]; //højde i pixels
        $imgtype = $imginfo[2];  //jpg, gif, bmp osv
        $imghtml = $imginfo[3];  //height="yyy" width="xxx" - for use directly in html
            Echo "Alt OK<br />";
            Echo $_REQUEST['tekst'];
            }
            else {}
        }
        else {
              echo "Filtypen er ikke korrekt!";
        }   
    }

}

elseif (empty($_GET['mode'])) {
    ?>

    <form action="test3.php?mode=upload" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="100000">
    <?php
    $res = mysql_query("SELECT * FROM gallerier");
    echo "<select name=ddgalleri size=1>";
    while($row = mysql_fetch_array($res)) {
    echo "<option value=".$row["galleriid"].">".$row["galleri"]."</option>";
    }
    echo "</select><br />";

    mysql_close();
    ?>
    <input type="file" name="fil"><br />
    <input type="text" name="tekst">
    <br /><br />
    <input type="submit" name="submit" value="Upload" >
    </form>

    <?php

}
else {
    echo "Bad guy!";
}
?>

</body>
</html>
////////////// SCRIPT SLUT /////////////////////
Avatar billede ohmish Nybegynder
29. oktober 2003 - 14:46 #8
glem de første 3 linier
Avatar billede svjensen Nybegynder
29. oktober 2003 - 23:01 #9
Så lykkedes det.

Jeg har ryddet lidt ud i mit script, da jeg opdagede at der var nogle ting der stammede fra et andet projekt. Desuden har jeg lavet tvunget lowercase. Min endelige fil ser således ud:

////////////// SCRIPT START /////////////////
<?php
include("connection.php");

$updir = "upload/";  // Definer stien til dit oploadbibliotek
$aft = array('image/jpeg','image/pjpeg','image/png'); // De filtyper der kan uploades

/*
    Function checkgd()
    checks the version of gd, and returns "yes" when it's higher than 2
*/
function checkgd(){
    $gd2="";
    ob_start();
    phpinfo(8);
    $phpinfo=ob_get_contents();
    ob_end_clean();
    $phpinfo=strip_tags($phpinfo);
    $phpinfo=stristr($phpinfo,"gd version");
    $phpinfo=stristr($phpinfo,"version");
    preg_match('/\d/',$phpinfo,$gd);
    if ($gd[0]=='2'){$gd2="yes";}
    return $gd2;
}

/*
    Function createthumb($name,$filename,$new_w,$new_h, $updir)
    creates a resized image
    variables:
    $name        Original filename
    $filename    Filename of the resized image
    $new_w        width of resized image
    $new_h        height of resized image
*/   
function createthumb($name,$filename,$new_w,$new_h,$updir){

    global $gd2;
    $system=explode(".",$name);

    if (preg_match("/jpg|jpeg/",$system[1])){$src_img=imagecreatefromjpeg($name);}
    if (preg_match("/png/",$system[1])){$src_img=imagecreatefrompng($name);}
    $old_x=imageSX($src_img);
    $old_y=imageSY($src_img);
    if ($old_x > $old_y) {
        $thumb_w=$new_w;
        $thumb_h=$old_y*($new_h/$old_x);
    }
    if ($old_x < $old_y) {
        $thumb_w=$old_x*($new_w/$old_y);
        $thumb_h=$new_h;
    }
    if ($old_x == $old_y) {
        $thumb_w=$new_w;
        $thumb_h=$new_h;
    }
    if ($gd2==""){
        $dst_img=ImageCreate($thumb_w,$thumb_h);
        imagecopyresized($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y);
    }else{
        $dst_img=ImageCreateTrueColor($thumb_w,$thumb_h);
        imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y);
    }
    if (preg_match("/png/",$system[1])){
        imagepng($dst_img,$filename);
    } else {
        imagejpeg($dst_img,$filename);
    }
    imagedestroy($dst_img);
    imagedestroy($src_img);
}


?>
<html>
<head>
<title>Untitled Document</title>
<link href="scroll.css" type="text/css" rel="stylesheet">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#D0D0D0" text="#000000">
<font face="Verdana, Arial, Helvetica, sans-serif" size="2">upload</font>
<br><br>
<?php
if (isset($_GET['mode']) && $_GET['mode'] == "upload") {
    $galleri = $_POST['ddgalleri'];
    $newfilename = $updir.$galleri."_".$_FILES['fil']['name'];
    $newfilename = strtolower($newfilename);
    $newthumb = $updir."thumb_".$galleri."_".$_FILES['fil']['name'];
    $newthumb = strtolower($newthumb);

    if (empty($_REQUEST['fil'])) {
        echo "Du skal vælge en fil";
    }
    else {

      if (in_array($_FILES['fil']['type'],$aft)) {
      if (move_uploaded_file($_FILES['fil']['tmp_name'], $newfilename)) {
        $gd2=checkgd();
        createthumb($newfilename, $newthumb,100,100,$updir);

        $imginfo = getimagesize($newfilename);
        $imgwidth = $imginfo[0];  //bredde i pixels
        $imgheight = $imginfo[1]; //højde i pixels
        $imgtype = $imginfo[2];  //jpg, gif, bmp osv
        $imghtml = $imginfo[3];  //height="yyy" width="xxx" - for use directly in html
            Echo "Alt OK<br />";
            Echo $_REQUEST['tekst'];
            }
            else {}
        }
        else {
              echo "Filtypen er ikke korrekt!";
        }   
    }

}

elseif (empty($_GET['mode'])) {
    ?>

    <form action="test2.php?mode=upload" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="100000">
    <?php
    $res = mysql_query("SELECT * FROM gallerier");
    echo "<select name=ddgalleri size=1>";
    while($row = mysql_fetch_array($res)) {
    echo "<option value=".$row["galleriid"].">".$row["galleri"]."</option>";
    }
    echo "</select><br />";

    mysql_close();
    ?>
    <input type="file" name="fil"><br />
    <input type="text" name="tekst">
    <br /><br />
    <input type="submit" name="submit" value="Upload" >
    </form>

    <?php

}
else {
    echo "Bad guy!";
}
?>

</body>
</html>
//////////////// SCRIPT SLUT ////////////////

ohmish my friend, et svar giver point. Tak for hjælpen
Avatar billede ohmish Nybegynder
19. november 2003 - 12:00 #10
nådada. det havde jeg glemt alt om :)
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

IT-JOB