20. oktober 2007 - 20:25Der 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.
#--------------------------# # 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. # #----------------------------------#
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
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
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.
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.
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.
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);
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
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.
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.
Nå. Jeg lukker og forsøger at lave noget andet. Jeg takker mange gange for hjælpen selvom det ikke lykkedes.
Synes godt om
Ny brugerNybegynder
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.