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

Problem med upload bibliotek.

Vha. af scriptet herunder uploader jeg et billede, og laver automatisk en thumb. Scriptet virker som det er nu, men med et enkelt problem.

$updir defineres og angiver hvilket bibliotek billedet skal uploades til, hvilket virker fint.
Men når jeg skal lave min thumbnail, så er jeg nødt til at angive hvor det originale billede befinder sig. Det ville jo være dejligt, at det automatisk fulgtes med upload biblioteket.

///////// SCRIPT START ////////////////
<?php
$updir = $_SERVER["DOCUMENT_ROOT"]."/test/upload";  // Definer stien til dit oploadbibliotek
echo $updir." :updir<br />";
$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 $system[1]." :system[1]<br />";
    echo $name." :name<br />";

    if (preg_match("/jpg|jpeg/",$system[1])){$src_img=imagecreatefromjpeg("upload/".$name);}
    if (preg_match("/png/",$system[1])){$src_img=imagecreatefrompng("upload/".$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") {
  $newfilename = $updir."/".$_FILES['fil']['name'];

    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($_FILES['fil']['name'],$updir."/"."thumb_".$_FILES['fil']['name'],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="test2.php?mode=upload" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="100000">
    <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 repox Seniormester
29. oktober 2003 - 13:46 #1
Det var da et ualmindeligt stort script for så lidt! :)
prøv engang at kigge på http://www.err0r.dk/docs.php?fetchdoc=4
Avatar billede svjensen Nybegynder
29. oktober 2003 - 14:08 #2
Der er lige det problem med dit script, at det kræver GD vers.2.0 eller højere.

Mit script tager højde for det. Jeg skal ikke udelukke, at der kan reduceres i mit, da det er flere forskellige dele jeg har koblet sammen. Men det virker,lige bortset fra det med biblioteket.
Avatar billede repox Seniormester
29. oktober 2003 - 14:28 #3
Hvis du nu bruger en tidligere version så kan du skift funktionen ImageCreateTrueColor() ud med ImageCreate(), for ImageCreateTrueColor er først kommet som en del af gdlib 2.0, mens ImageCreate er fra de tidligere versioner!
Avatar billede svjensen Nybegynder
29. oktober 2003 - 14:33 #4
Det er præcis det mit script gør. Den tester (vha.:

/*
    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;
}

om der er installeret gd2. Afhængig af resultatet så anvender den de relevante funktioner:
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);
    }


Men det er jo sådan set mappe problemet jeg gerne vil have løst ;-)
Avatar billede repox Seniormester
29. oktober 2003 - 14:35 #5
Det er også det der fremgår af dit script:

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);
    }
Avatar billede repox Seniormester
29. oktober 2003 - 14:39 #6
ret $updir til $updir = "test/upload/"; og se om det virker ?
Avatar billede svjensen Nybegynder
29. oktober 2003 - 14:42 #7
Det giver følgende fejl:

Warning: Unable to create 'test/upload/Vinter.jpg': No such file or directory in /customers/silkeborgbasketball.dk/silkeborgbasketball.dk/httpd.www/test/test2.php on line 131

Warning: Unable to move '/tmp/phpMZrx9h' to 'test/upload/Vinter.jpg' in /customers/silkeborgbasketball.dk/silkeborgbasketball.dk/httpd.www/test/test2.php on line 131
Avatar billede repox Seniormester
29. oktober 2003 - 14:44 #8
Så prøv $updir = "upload/";

er selv fra silkeborg... nice :)
Avatar billede svjensen Nybegynder
29. oktober 2003 - 14:47 #9
Det har jeg lige prøvet:

Warning: imagecreatefromjpeg: Unable to open 'Vinter.jpg' for reading in /customers/silkeborgbasketball.dk/silkeborgbasketball.dk/httpd.www/test/test2.php on line 49

Warning: imagesx(): supplied argument is not a valid Image resource in /customers/silkeborgbasketball.dk/silkeborgbasketball.dk/httpd.www/test/test2.php on line 51

Warning: imagesy(): supplied argument is not a valid Image resource in /customers/silkeborgbasketball.dk/silkeborgbasketball.dk/httpd.www/test/test2.php on line 52

Warning: imagecopyresized(): supplied argument is not a valid Image resource in /customers/silkeborgbasketball.dk/silkeborgbasketball.dk/httpd.www/test/test2.php on line 67

Warning: imagedestroy(): supplied argument is not a valid Image resource in /customers/silkeborgbasketball.dk/silkeborgbasketball.dk/httpd.www/test/test2.php on line 78
Alt OK

Det er et problem jeg er stødt på tidligere. Det var derfor, at jeg indsatte "upload". for at tvinge den til at læse i det rigtige bibliotek. Men jeg syntes, at det burde være muligt at få den til at gøre det automatisk på baggrund af det upload bibliotek, der er angivet.
Avatar billede svjensen Nybegynder
29. oktober 2003 - 14:47 #10
Hvornår kommer du og spiller basket så? ;-)
Avatar billede repox Seniormester
29. oktober 2003 - 14:52 #11
HAr du prøvet at sætte rettighederne til 777 på upload biblioteket ?
Avatar billede repox Seniormester
29. oktober 2003 - 14:52 #12
Jeg kommer forbi når jeg har tabt en tredive kilo eller deromkring! *G* Selvom jeg nu godt kan lide at spille basket... hehe
Avatar billede svjensen Nybegynder
29. oktober 2003 - 14:54 #13
Jeg kan godt skrive til biblioteket. Den originale fil bliver uden problemer uploadet, og det gør min thumb også. Det eneste problem er, at jeg er nødt til (i min createthumb function) at fortælle scriptet hvor det originale billede er uploadet til.
Avatar billede repox Seniormester
29. oktober 2003 - 14:59 #14
hvad så hvis du sætter $updir til $updir = "upload";
Kan se at scriptet selv sætter en / ind....
Avatar billede svjensen Nybegynder
29. oktober 2003 - 15:01 #15
Det er sådan den står lige nu, med det resultat, at den originale fil uploades, men scriptet ikke kan finde den, når den skal bruges til at lave min thumb
Avatar billede repox Seniormester
29. oktober 2003 - 15:09 #16
Prøv at sætte $updir = "upload";

og ændre disse to linier
if (preg_match("/jpg|jpeg/",$system[1])){$src_img=imagecreatefromjpeg("upload/".$name);}
    if (preg_match("/png/",$system[1])){$src_img=imagecreatefrompng("upload/".$name);}


til:

if (preg_match("/jpg|jpeg/",$system[1])){$src_img=imagecreatefromjpeg($name);}
    if (preg_match("/png/",$system[1])){$src_img=imagecreatefrompng($name);}
Og hvis det ikke er det, så ville jeg finde et andet script... ;)
Avatar billede svjensen Nybegynder
29. oktober 2003 - 15:12 #17
OK, nu tror jeg at jeg er kommet problemet lidt nærmere.
Til syneladende så bliver variablen $updir ikke 'ført' med over i createthumb.
P.t. er $updir = "upload".
Hvis jeg skriver "upload" inde i createthumb, så virker det.
Men hvis jeg skriver $updir, så virker det ikke.

Hvordan hakker jeg lige den?
Avatar billede repox Seniormester
29. oktober 2003 - 15:14 #18
Jamen, hvis det virker hvis du skriver upload, så lad der bare stå det ?
Avatar billede svjensen Nybegynder
29. oktober 2003 - 17:41 #19
Jeg vil jo gerne undgå, at skulle rette inde i selve scriptet, hvis jeg ændrer upload biblioteket.
Jeg prøver lige at sende det sammen med mit funktionskald:
noget i retning af createthumb(filnavn, thumbnavn, højde, bredde, updir)
Avatar billede svjensen Nybegynder
29. oktober 2003 - 22:43 #20
OK, nu virker det. $updir fandt aldrig vej til funktionen, men vha. af ovenstående ændrede kald af funktionen createthumb virker det nu.

shady -> Tak for hjælpen, du hjalp mig i den rigtige retning. JEg syntes at vi skal dele pointene.
Avatar billede repox Seniormester
30. oktober 2003 - 08:00 #21
Behold du bare dem, er glad for at kunne hjælpe! :) Glæder mig da til at se senere hvordan siden kommer til at se ud... :) Må jo følge lidt med når det nu er silkeborg! ;)
Avatar billede svjensen Nybegynder
11. november 2003 - 11:54 #22
OK
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