Avatar billede nicolaib Praktikant
20. oktober 2007 - 20:25 Der er 11 kommentarer og
1 løsning

Kombiner to scripts - De virker hver for sig

Jeg har to scripts - et som uploader billeder og et som resizer. Jeg har forgæves forsøgt at sætte dem sammen men det er ikke lykkedes. Kan nogen hjælpe?
Målet er at billeder skal uploades, resizes og renames.

Resize-scriptet ser sådan her ud
<?php
function resize( $file_name, $newfilename, $maxw, $maxh, $quality=85 )

    $ext = strtolower( pathinfo( $file_name, PATHINFO_EXTENSION ) );
    switch($ext) 
    {   
    case 'jpeg':   
    case 'jpe':   
    case 'jpg':     
        $srcim = imagecreatefromjpeg( $file_name );
      break;   
    case 'gif':
        $srcim = imagecreatefromgif( $file_name );
      break;   
    case 'png':      $srcim = imagecreatefrompng( $file_name );
      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($ext) 
  { 
    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( $srcim, $newfilename, $png_q );
        break;
    default:
        return false;
  } 
  imagedestroy( $dstim ); 
  imagedestroy( $srcim ); 
  return file_exists($newfilename);
} // Slut function resize()

#--------------------------#
# Her resizes billederne  #
#--------------------------#                    list($bredde, $hojde) = getimagesize("$file_name");
//Finder højden og bredden på det billede jeg vil resize 

$forhold = $bredde/$hojde;
//Hvor stor er højden i forhold til bredden? 
                               
//Finder den nye og bredde 
$bredde_ny = round($hojde_ny*$forhold);
                           
// Her kører resize-funktionen
resize("$file_name", "$file_name", "$bredde_ny", "$hojde_ny");
#------------------------------------------------------------#
?>

Mit upload-script ser sadån her ud

<?php
//upload directory.
$upload_dir = "pictures/";
//number of files to upload.
$num_files = 5;
//the file size in bytes.
$size_bytes =5120000; //5120000 bytes = 5000KB.
//Extensions you want files uploaded limited to.
$limitedext = array(".gif",".jpg",".jpeg",".png");
// Her sættes højden som billederne skal resizes til
$hojde_ny = 300;

#----------------------------------------------#
#                                              #
#----------------------------------------------#
//check if the directory exists or not.
    if (!is_dir("$upload_dir")) {
      die ("Error: The directory <b>($upload_dir)</b> doesn't exist");
    }
      //check if the directory is writable.
    if (!is_writeable("$upload_dir")){
      die ("Error: The directory <b>($upload_dir)</b> is NOT writable, Please CHMOD (777)");
    }
    //Her forbindes til databasen
    if (!mysql_connect('host','root','')) {
      die ("Error: Connection to the database could not be made.");
    }
    //Her vælges databasen
   
 
//if the form has been submitted, then do the upload process
//infact, if you clicked on (Upload Now!) button.
if (isset($_POST['upload_form'])){

      echo "<h3>Upload results:</h3>";

      //do a loop for uploading files based on ($num_files) number of files.
      for ($i = 1; $i <= $num_files; $i++) {

          //define variables to hold the values.
          $new_file = $_FILES['file'.$i];
          $file_name = $new_file['name'];
          //to remove spaces from file name we have to replace it with "_".
          $file_name = str_replace(' ', '_', $file_name);
          $file_tmp = $new_file['tmp_name'];
          $file_size = $new_file['size'];

          #-----------------------------------------------------------#
          # this code will check if the files was selected or not.    #
          #-----------------------------------------------------------#

          if (!is_uploaded_file($file_tmp)) {
              //print error message and file number.
              echo "File $i: Not selected.<br>";
          }else{
                #-----------------------------------------------------------#
                # this code will check file extension                      #
                #-----------------------------------------------------------#

                $ext = strrchr($file_name,'.');
                if (!in_array(strtolower($ext),$limitedext)) {
                    echo "File $i: ($file_name) Wrong file extension. <br>";
                }else{
                      #------------------------------------- ------#
                      # this code will check file size is correct  #
                      #--------------------------------------------#

                      if ($file_size > $size_bytes){
                          echo "File $i: ($file_name) Failed to upload. File must be <b>". $size_bytes / 1024 ."</b> KB. <br>";
                      }else{
                            #---------------------------------#
                            # this code check if file is already EXISTS. #
                            #----------------------------------#

                            if(file_exists($upload_dir.$file_name)){
                                echo "File $i: ($file_name) already exists.<br>";
                            }else{
                             
                                       
                                     
                #----------------------------------------------#
                                  # Her omdøber jeg filen          #
                                  #---------------------------------------------#
                                 
                                         
                                        if("jpg" || "jpe" == strtolower( pathinfo( $file_name, PATHINFO_EXTENSION ) )){
                                            $filendelse = ".jpg";
                                            $navn = substr($file_name, 0, -4);
                                        }
                                        elseif("jpeg" == strtolower( pathinfo( $file_name, PATHINFO_EXTENSION ) )){
                                            $filendelse = ".jpg";
                                            $navn = substr($file_name, 0, -5);
                                        }
                                        elseif("gif" == strtolower( pathinfo( $file_name, PATHINFO_EXTENSION ) )) {
                                              $filendelse = ".gif";
                                              $navn = substr($file_name, 0, -4);
                                        }
                                        else {
                                            $filendelse = ".png";
                                            $navn = substr($file_name, 0, -4);
                                        }
                                        $file_name = "$navn"."_res"."$filendelse";
                                        $old_file_name = "$navn"."$filendelse";
                                     
                                      $full_file_path = "$upload_dir"."$file_name";
                           
                                     
                                #----------------------------------#
                                # her uploades filerne og data indsættes #
                                #----------------------------------#
                                     
                                          if     (    mysql_query("INSERT INTO xxxxxxx
                                                            (filename)
                                                            VALUES('$full_file_path')")
                                                    &&
                                                    move_uploaded_file($file_tmp,$upload_dir.$file_name)
                                               
                                                )
                                            {
                                                echo "File $i: ($old_file_name) Uploaded under the name of ($file_name)<br>";
                                              }else{
                                                echo "File $i: Failed to upload.<br>";
                                               
                                      }#end of (move_uploaded_file).
                               
                            }#end of (file_exists).

                      }#end of (file_size).

                }#end of (limitedext).

          }#end of (!is_uploaded_file).

      }#end of (for loop).
      # print back button.
      echo "»<a href=\"$_SERVER[PHP_SELF]\">back</a>";
////////////////////////////////////////////////////////////////////////////////
//else if the form didn't submitted then show it.
}else{
    echo " <h3>Select files to upload!.</h3>
          Max file size = ". $size_bytes / 1024 ." KB";
    echo " <form method=\"post\" action=\"$_SERVER[PHP_SELF]\" enctype=\"multipart/form-data\">";
          // show the file input field based on($num_files).
          for ($i = 1; $i <= $num_files; $i++) {
              echo "File $i: <input type=\"file\" name=\"file". $i ."\"><br>";
          }
    echo " <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"$size_bytes\">
          <input type=\"submit\" name=\"upload_form\" value=\"Upload Now!\">
          </form>";
}
?>
Avatar billede olebole Juniormester
20. oktober 2007 - 20:28 #1
<ole>

Hvad virker og hvad virker ikke?
Hvad sker og hvad sker ikke?
Får du fejl - og har du fejlmeldinger slået til?

/mvh
</bole>
Avatar billede nicolaib Praktikant
20. oktober 2007 - 20:40 #2
Jeg har prøvet at sætte dem sammen på mange forskellige måder. Men som jeg ser det er problemet at jeg ikke kan gennemskue om man kan/skal resize billedet inden det bliver valideret og renamet. Jeg har fået det til at virke før jeg tilføjede rename men med rename-funktion giver det typisk fejl som "failed to open stream" osv.

Jeg har ikke den helt store forståelse af de midlertidige filer der bliver oprettet i scriptet og jeg tror det er der kæden falder af.
Jeg gik fra at have et velfungerende script uden rename-funktion til pludselig at få 20 fejl da rename af filerne var tilføjet.

Jeg har bl.a. fået disse fejl men billedet bliver alligevel uploadet dog uden resize.

Warning: getimagesize(5.JPG) [function.getimagesize]: failed to open stream: No such file or directory in C:\a_www\testscripts\uploadresizerename\uploadresize.php on line 162

Warning: Division by zero in C:\a_www\testscripts\uploadresizerename\uploadresize.php on line 163

Warning: imagecreatefromjpeg(5.JPG) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in C:\a_www\testscripts\uploadresizerename\uploadresize.php on line 10

Warning: imagesx(): supplied argument is not a valid Image resource in C:\a_www\testscripts\uploadresizerename\uploadresize.php on line 20

Warning: imagesy(): supplied argument is not a valid Image resource in C:\a_www\testscripts\uploadresizerename\uploadresize.php on line 21

Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in C:\a_www\testscripts\uploadresizerename\uploadresize.php on line 27

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in C:\a_www\testscripts\uploadresizerename\uploadresize.php on line 28

Warning: imagejpeg(): supplied argument is not a valid Image resource in C:\a_www\testscripts\uploadresizerename\uploadresize.php on line 33

Warning: imagedestroy(): supplied argument is not a valid Image resource in C:\a_www\testscripts\uploadresizerename\uploadresize.php on line 44

Warning: imagedestroy(): supplied argument is not a valid Image resource in C:\a_www\testscripts\uploadresizerename\uploadresize.php on line 45
Avatar billede dkfire Nybegynder
20. oktober 2007 - 21:56 #3
Det vil være bedre hvis du viser det som ikke virker, i stedet for noget kode som virker. Vi kan jo ikke se nogle af det du prøver på af det kode du har vist.

Men efter at dømme af dine fejl, så skyldes det at du prøvet at resize et billede som ikke findes. De fleste fejl er følgefejl af den første fejl.

Vis den kode du har lavet i uploadresize.php så tager vi den derfra.
Avatar billede nicolaib Praktikant
20. oktober 2007 - 23:27 #4
Idéen med koden der virker er jo netop at jeg har alle delene som virker.
Det som står overfor er som jeg gerne vil have det.  Jeg har bare ikke været istand til at sætte resize-scriptet ind i upload-scriptet. Det er egentlig det jeg gerne vil have hjælp til.
Det jeg arbejdede på var at sætte resize-scriptet ind lige før indsættelse i database og selve upload. Er det ikke muligt at give et tip til hvordan det kan gøres. - Er dette overhovedet det korrekte sted at gøre det.

@ dkfire -> du har selfølgelig ret i at jeg kom til at vise fejlmeddelelser fra et varierende script til det aktuelle. men jeg vil bare hellere vise nogen som har alle delene med for at give det fulde overblik.
Resize-scriptet er jo reelt set bare en funktion som jeg ikke kan finde ud af at indsætte og tilpasse men den virker jo for sig selv.
Avatar billede dkfire Nybegynder
20. oktober 2007 - 23:43 #5
Der er to måder du kan gøre det på.
Du kan resize efter du har flyttet filen, eller du kan resize og samtidig flytte filen, kommer lidt an på hvad du vil gennem i mappen.
Hvis du har brug for at gemme det originale billede, så skal du resize efter du har flyttet det uploaded billede.
Men hvis du ikke har brug for det originale billede, kan du erstatte move_uploaded_file funktionen med din resize funktion.
Avatar billede nicolaib Praktikant
20. oktober 2007 - 23:47 #6
Det originale billede skal ikke gemmes på serveren.

Kan du give et eksempel på hvordan det kommer til at se ud.

Det er netop det med "temporary files" jeg ikke helt har fanget.
På forhånd tak.
Avatar billede nicolaib Praktikant
22. oktober 2007 - 16:52 #7
Nu har jeg prøvet at fjerne move_uploaded_file og det virker stadig ikke.
Nu viser jeg lige igen hvordan jeg bl.a. har prøvet at sætte dem sammen samt hvilken fejlmeddelelse jeg får.
Hvis jeg fjerner resize virker det uden problemer.
-----------------------------------------------------------------------
<?php
function resize( $file_name, $newfilename, $maxw, $maxh, $quality=85 )

    $ext = strtolower( pathinfo( $file_name, PATHINFO_EXTENSION ) );
    switch($ext) 
    {   
    case 'jpeg':   
    case 'jpe':   
    case 'jpg':     
        $srcim = imagecreatefromjpeg( $file_name );
      break;   
    case 'gif':
        $srcim = imagecreatefromgif( $file_name );
      break;   
    case 'png':      $srcim = imagecreatefrompng( $file_name );
      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($ext) 
  { 
    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( $srcim, $newfilename, $png_q );
        break;
    default:
        return false;
  } 
  imagedestroy( $dstim ); 
  imagedestroy( $srcim ); 
  return file_exists($newfilename);
} // Slut function resize()


//upload directory.
//change to fit your need eg. files, upload .... etc.
$upload_dir = "pictures/";
//number of files to upload.
$num_files = 5;
//the file size in bytes.
$size_bytes =5120000; //5120000 bytes = 5000KB.
//Extensions you want files uploaded limited to.
$limitedext = array(".gif",".jpg",".jpe",".jpeg",".png");
//Her angives højden på billederne. Den højde de ender med at være når uploaded.
$hojde_ny = 300;


#-----------------------------------------------------------------------------------------------#
#                                                                                                 #
#-----------------------------------------------------------------------------------------------#

   
       
       
      //check if the directory exists or not.
    if (!is_dir("$upload_dir")) {
      die ("Error: The directory <b>($upload_dir)</b> doesn't exist");
    }
      //check if the directory is writable.
    if (!is_writeable("$upload_dir")){
      die ("Error: The directory <b>($upload_dir)</b> is NOT writable, Please CHMOD (777)");
    }
    //Her forbindes til databasen
    if (!mysql_connect('host','root','')) {
      die ("Error: Connection to the database could not be made.");
    }
    //Her vælges databasen
    if (!mysql_select_db('database')) {
      die ("Error: Database could not be selected.");
    }
 
//if the form has been submitted, then do the upload process
//infact, if you clicked on (Upload Now!) button.
if (isset($_POST['upload_form'])){

      echo "<h3>Upload results:</h3>";

      //do a loop for uploading files based on ($num_files) number of files.
      for ($i = 1; $i <= $num_files; $i++) {

          //define variables to hold the values.
          $new_file = $_FILES['file'.$i];
          $file_name = $new_file['name'];
          //to remove spaces from file name we have to replace it with "_".
          $file_name = str_replace(' ', '_', $file_name);
          $file_tmp = $new_file['tmp_name'];
          $file_size = $new_file['size'];
         
         

          #-----------------------------------------------------------#
          # this code will check if the files was selected or not.    #
          #-----------------------------------------------------------#

          if (!is_uploaded_file($file_tmp)) {
              //print error message and file number.
              echo "File $i: Not selected.<br>";
          }else{
                #-----------------------------------------------------------#
                # this code will check file extension                      #
                #-----------------------------------------------------------#

                $ext = strrchr($file_name,'.');
                if (!in_array(strtolower($ext),$limitedext)) {
                    echo "File $i: ($file_name) Wrong file extension. <br>";
                }else{
                      #-----------------------------------------------------------#
                      # this code will check file size is correct                #
                      #-----------------------------------------------------------#

                      if ($file_size > $size_bytes){
                          echo "File $i: ($file_name) Failed to upload. File must be <b>". $size_bytes / 1024 ."</b> KB. <br>";
                      }else{
                            #-----------------------------------------------------------#
                            # this code check if file is already EXISTS.                #
                            #-----------------------------------------------------------#

                                if(file_exists($upload_dir.$file_name)){
                                    echo "File $i: ($file_name) already exists.<br>";
                                }else{
                                      #-----------------------------------------------------------#
                                      # this part will resize the files.                           #
                                      #-----------------------------------------------------------#
                                              //Her udregnes billedernes dimensioner til brug for resize()
                                            list($bredde, $hojde) = getimagesize("$file_name"); //Find højden og bredden på det billede jeg vil resize 
                                            $forhold = $bredde/$hojde; //Hvor stor er højden i forhold til bredden? 
                                           
                                                    //Find den nye og bredde 
                                                    $bredde_ny = round($hojde_ny*$forhold);
                                                   
                                               
                                                   
                                            // Her kører resize-funktionen
                                           
                                      #-----------------------------------------------------------#
                                      # this function will upload the files.  :) ;) cool          #
                                      #-----------------------------------------------------------#
                                                  if("jpg" || "jpe" == strtolower( pathinfo( $file_name, PATHINFO_EXTENSION ) )){
                                                    $filendelse = ".jpg";
                                                    $navn = substr($file_name, 0, -4);
                                                }
                                                elseif("jpeg" == strtolower( pathinfo( $file_name, PATHINFO_EXTENSION ) )){
                                                    $filendelse = ".jpg";
                                                    $navn = substr($file_name, 0, -5);
                                                }
                                                elseif("gif" == strtolower( pathinfo( $file_name, PATHINFO_EXTENSION ) )) {
                                                      $filendelse = ".gif";
                                                      $navn = substr($file_name, 0, -4);
                                                }
                                                else {
                                                    $filendelse = ".png";
                                                    $navn = substr($file_name, 0, -4);
                                                }
                                                $file_name = "$navn"."_res"."$filendelse";
                                               
                                              $full_file_path = "$upload_dir"."$file_name";
                                     
                                      if     (    mysql_query("INSERT INTO xxxxx
                                                        (filename)
                                                        VALUES('$full_file_path')")
                                                &&
                                                //move_uploaded_file($file_tmp,$upload_dir.$file_name)

                                                // Her kører resize-funktionen
                                                resize("$file_name", "$file_name" , "$bredde_ny", "$hojde_ny")
                                           
                                            )
                                        {
                                            echo "File $i: ($file_name) Uploaded.<br>";
                                          }else{
                                            echo "File $i: Failed to upload.<br>";
                                      }#end of (move_uploaded_file).
                               
                            }#end of (file_exists).

                      }#end of (file_size).

                }#end of (limitedext).

          }#end of (!is_uploaded_file).

      }#end of (for loop).
      # print back button.
      echo "»<a href=\"$_SERVER[PHP_SELF]\">back</a>";
////////////////////////////////////////////////////////////////////////////////
//else if the form didn't submitted then show it.
}else{
    echo " <h3>Select files to upload!.</h3>
          Max file size = ". $size_bytes / 1024 ." KB";
    echo " <form method=\"post\" action=\"$_SERVER[PHP_SELF]\" enctype=\"multipart/form-data\">";
          // show the file input field based on($num_files).
          for ($i = 1; $i <= $num_files; $i++) {
              echo "File $i: <input type=\"file\" name=\"file". $i ."\"><br>";
          }
    echo " <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"$size_bytes\">
          <input type=\"submit\" name=\"upload_form\" value=\"Upload Now!\">
          </form>";
}

?>
Warning: getimagesize(2.jpg) [function.getimagesize]: failed to open stream: No such file or directory in C:\a_www\testscripts\uploadresizerename\uploadresizerename.php on line 162

Warning: Division by zero in C:\a_www\testscripts\uploadresizerename\uploadresizerename.php on line 163

Warning: imagecreatefromjpeg(2_res.jpg) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in C:\a_www\testscripts\uploadresizerename\uploadresizerename.php on line 10

Warning: imagesx(): supplied argument is not a valid Image resource in C:\a_www\testscripts\uploadresizerename\uploadresizerename.php on line 20

Warning: imagesy(): supplied argument is not a valid Image resource in C:\a_www\testscripts\uploadresizerename\uploadresizerename.php on line 21

Warning: Division by zero in C:\a_www\testscripts\uploadresizerename\uploadresizerename.php on line 22

Warning: Division by zero in C:\a_www\testscripts\uploadresizerename\uploadresizerename.php on line 23

Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in C:\a_www\testscripts\uploadresizerename\uploadresizerename.php on line 27

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in C:\a_www\testscripts\uploadresizerename\uploadresizerename.php on line 28

Warning: imagejpeg(): supplied argument is not a valid Image resource in C:\a_www\testscripts\uploadresizerename\uploadresizerename.php on line 33

Warning: imagedestroy(): supplied argument is not a valid Image resource in C:\a_www\testscripts\uploadresizerename\uploadresizerename.php on line 44

Warning: imagedestroy(): supplied argument is not a valid Image resource in C:\a_www\testscripts\uploadresizerename\uploadresizerename.php on line 45
Avatar billede olebole Juniormester
22. oktober 2007 - 19:15 #8
Mon ikke, der skal stå:
    list($bredde, $hojde) = getimagesize($file_name); //Find højden og bredden på det billede jeg vil resize
Avatar billede olebole Juniormester
22. oktober 2007 - 19:16 #9
- altså uden gåseøjne  :)
Avatar billede dkfire Nybegynder
22. oktober 2007 - 23:39 #10
Du kan ikke bruge
list($bredde, $hojde) = getimagesize($file_name)
da $file_name ikke er en fil. Du skal bruge det midlertide navn til det, da filen ikke er flyttet til mappen endnu.
Avatar billede nicolaib Praktikant
23. oktober 2007 - 00:21 #11
Hvad er så mit midlertidige navn til filen? Jeg har prøvet at erstatte med $file_tmp men kan heller ikke få det til at virke. Er det det rigtige at erstatte med? Fejlmeddelelserne svarer dog til at at den ikke kan finde filen.
Avatar billede nicolaib Praktikant
23. oktober 2007 - 12:27 #12
Nå. Jeg lukker og forsøger at lave noget andet. Jeg takker mange gange for hjælpen selvom det ikke lykkedes.
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