Avatar billede jacobs1 Nybegynder
13. juni 2006 - 10:50 Der er 12 kommentarer og
1 løsning

sti til billede upload script

Hej..

Jeg har fundet dette php script, der kan resize billeder super smart.
Problemet er at den ikke uploader noget billede op på min server.
Den skulle gerne ligge det resized billedet i en mappe der hedder images.

Håber der er nogle der kan hjælpe


<html>

<head>
    <title>web.blazonry : PHP : Upload and Resize an Image</title>

<?php

if ($REQUEST_METHOD == "POST")
{

    /* SUBMITTED INFORMATION - use what you need
    * temporary filename (pointer): $imgfile
    * original filename          : $imgfile_name
    * size of uploaded file      : $imgfile_size
    * mime-type of uploaded file  : $imgfile_type
    */

    /*== upload directory where the file will be stored
          relative to where script is run ==*/
   
    $uploaddir = "images";
   

    /*== get file extension (fn at bottom of script) ==*/
    /*== checks to see if image file, if not do not allow upload ==*/
    $pext = getFileExtension($imgfile_name);
    $pext = strtolower($pext);
    if (($pext != "jpg")  && ($pext != "jpeg"))
    {
        print "<h1>ERROR</h1>Image Extension Unknown.<br>";
        print "<p>Please upload only a JPEG image with the extension .jpg or .jpeg ONLY<br><br>";
        print "The file you uploaded had the following extension: $pext</p>\n";

        /*== delete uploaded file ==*/
        unlink($imgfile);
        exit();
    }


    //-- RE-SIZING UPLOADED IMAGE

    /*== only resize if the image is larger than 250 x 200 ==*/
    $imgsize = GetImageSize($imgfile);

    /*== check size  0=width, 1=height ==*/
    if (($imgsize[0] > 250) || ($imgsize[1] > 200))
    {
        /*== temp image file -- use "tempnam()" to generate the temp
            file name. This is done so if multiple people access the
            script at once they won't ruin each other's temp file ==*/
        $tmpimg = tempnam("/tmp", "MKUP");

        /*== RESIZE PROCESS
            1. decompress jpeg image to pnm file (a raw image type)
            2. scale pnm image
            3. compress pnm file to jpeg image
        ==*/
       
        /*== Step 1: djpeg decompresses jpeg to pnm ==*/
        system("djpeg $imgfile >$tmpimg");
       

        /*== Steps 2&3: scale image using pnmscale and then
            pipe into cjpeg to output jpeg file ==*/
        system("pnmscale -xy 250 200 $tmpimg | cjpeg -smoo 10 -qual 50 >$imgfile");

        /*== remove temp image ==*/
        unlink($tmpimg);

    }

    /*== setup final file location and name ==*/
    /*== change spaces to underscores in filename  ==*/
    $final_filename = str_replace(" ", "_", $imgfile_name);
    $newfile = "/$final_filename";
   
    /*== do extra security check to prevent malicious abuse==*/
    if (is_uploaded_file($imgfile))
    {

      /*== move file to proper directory ==*/
      if (!copy($imgfile,"$newfile"))
      {
          /*== if an error occurs the file could not
              be written, read or possibly does not exist ==*/
          print "Error Uploading File.";
          exit();
      }
    }

    /*== delete the temporary uploaded file ==*/
    unlink($imgfile);

   
    print("<img src=\"$final_filename\">");

    /*== DO WHATEVER ELSE YOU WANT
        SUCH AS INSERT DATA INTO A DATABASE  ==*/

}
?>


</head>
<body bgcolor="#FFFFFF">

    <h2>Upload and Resize an Image</H2>

    <form action="<?=$SCRIPT_NAME; ?>" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="50000">

    <p>Upload Image: <input type="file" name="imgfile"><br>
    <font size="1">Click browse to upload a local file</font><br>
    <br>
    <input type="submit" value="Upload Image">
    </form>

</body>
</html>

<?php
    /*== FUNCTIONS ==*/

    function getFileExtension($str) {

        $i = strrpos($str,".");
        if (!$i) { return ""; }

        $l = strlen($str) - $i;
        $ext = substr($str,$i+1,$l);

        return $ext;

    }
?>
Avatar billede loevgaard Praktikant
13. juni 2006 - 12:12 #1
Har du sat 0777 som rettigheder på din images-mappe?
Avatar billede jacobs1 Nybegynder
13. juni 2006 - 12:20 #2
ja - det har jeg. og sat var $uploaddir = "images";
i scriptet.?
Avatar billede loevgaard Praktikant
13. juni 2006 - 12:34 #3
Hvor ligger din mappe images?

Lad os sige at dit uploadscript ligger i samme mappe som mappen images, som jeg har angivet her:

.
..
uploadscript.php
images/

Så skal der stå: $uploaddir = "./images";
Avatar billede jacobs1 Nybegynder
13. juni 2006 - 13:30 #4
altså hvis jeg skulle kalde et billede i mappe fra scriptet ville jeg skrive : <img src="images/case.jpg">
Avatar billede loevgaard Praktikant
13. juni 2006 - 13:45 #5
Prøv at ændre $uploaddir til $uploaddir = "./images";
Avatar billede jacobs1 Nybegynder
13. juni 2006 - 18:37 #6
det virker desværre ikke :(
Avatar billede loevgaard Praktikant
13. juni 2006 - 18:54 #7
Du skal have den her dir-struktur:
.
..
images/ - med 0777 i rettigheder
uploadscript.php - med $uploaddir = "./images/" eller $uploaddir = "./images" <- Prøv begge to.

Hvis ovenstående ikke virker, er der fejl andetsteds
Avatar billede loevgaard Praktikant
13. juni 2006 - 18:57 #8
Skal heller ikke kunne sige om system() kunne spille en rolle. Burde den dog ikke, da den må køres fra safe_mode_exec-stien, som jo med 99,9% chance er det dir, dit script befinder sig i..
Avatar billede jacobs1 Nybegynder
13. juni 2006 - 19:12 #9
Mange tak for hjælpen 10vgaard, jeg kan simpelthen ikke få det til at virke. Men jeg har fundet denne function det virker :)

Så læg et svar, du skal have dine point for din indsats :)

function resize( $filename, $newfilename, $maxw, $maxh )
{
    $result = false;
    $srcim = imagecreatefromjpeg( $filename );
    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $wscale = $maxw / $ow;
    $hscale = $maxh / $oh;
    $scale = ( $hscale < $wscale ? $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 );
    $result = imagejpeg( $dstim, $newfilename, 85 );
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return $result;
}

resize( 'images/pics.jpg', 'images/pics.jpg', 100, 100 )
Avatar billede jacobs1 Nybegynder
13. juni 2006 - 19:16 #10
hey foresten:
ved du hvad denne fejl betyder?
Skal man ikke skrive session_start(); på alle sider man benytter Session?

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at httpd.www/list.php:13) in list.php on line 46

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started athttpd.www/list.php:13) in httpd.www/list.php on line 46
Avatar billede jacobs1 Nybegynder
13. juni 2006 - 19:20 #11
okay  session_start() skal stå som det aller første på siden.
men så har jeg en sider der siger sådan?
- det er også det sidste det lover jeg hahaha

Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 2 in /customers/httpd.www/space/space.php on line 111
Avatar billede loevgaard Praktikant
13. juni 2006 - 19:23 #12
Aner godt nok ikke hvad den fejlbesked betyder, smid din query, så kan jeg se på det.
Avatar billede jacobs1 Nybegynder
13. juni 2006 - 19:27 #13
hehe - det skal du ikke tænke mere på. endnu engang tak for hjælpen.
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