29. oktober 2003 - 12:08Der 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);
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; }
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!"; } }
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.
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!
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 ;-)
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
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.
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.
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
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... ;)
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.
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)
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! ;)
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.