03. marts 2006 - 13:49Der er
36 kommentarer og 2 løsninger
Billedevisningsproblem på Surftowns server med SAFE_MODE on
Hej Folkens. jeg har en lille webshop hostet hos Surftown, og deres servere kører med SAFE_MODE on. Min shop har tidligere ligget hos Webhosting hvor billedevisningen fungerede fint, men hos surftown kan jeg ikke tilføje nye billeder til mine produkter. Det skyldes efter sigende at surftown kører med SAFE-MODE on. Jeg uploader billeder via en brugerinterface som simpelt spørger om hvor billedet ligger på computeren og derefter henter det og tilføjer det til det aktuelle produkt. Der kommer ikke en decideret fejlmeddelelse, når jeg uploader et billede, men billedet vises simpelthen ikke efter det er uploaded. Jeg vil sætte stor pris på en konkret ændring af nedenstående kode, der udgør selve billedeuploadingen, som jeg kan bruge med det samme, men forklaring til hvordan jeg kan løse problemet er selvfølgelig også velkommen. 200 point til den dygtige der løser problemet for mig!
// Tjekker om den valgte fil er blandt accepteret typer if(!in_array($_FILES['strFile']['type'], $acceptedTypes) OR trim($_FILES['strFile']['tmp_name']) == "" OR trim($_FILES['strFile']['tmp_name']) =="none") { echo "Billed er ikke supportet. Tjek at det er jpeg format"; } else {
// De orginale størrelser på filen hentes $img_orig_size = getimagesize($_FILES['strFile']['tmp_name']); $img_orig_width = $img_orig_size[0]; $img_orig_height = $img_orig_size[1];
// undersøger om det er main eller extra // og tildeler filnavn derefter.
// Tjekker om billede er mindre en max størrelserne
if(($img_orig_width <= $IMG_BIG_WIDTH) AND ($img_orig_height <= $IMG_BIG_HEIGHT)) { echo "gemt - billed ikke resized<br>"; ImageJPEG($img_original, "$IMG_ROOT/$image_stored"); } else { echo "gemt - fuld størrelse<br>"; // Gemmer original billed i fuldstørrelse ImageJPEG($img_original, "$IMG_ROOT/big_$image_stored");
// for at holde propertionerne fra det orginale billed // regnes en ratio ud $mlt_w = $IMG_BIG_WIDTH / $img_orig_width; $mlt_h = $IMG_BIG_HEIGHT / $img_orig_height; $mlt = $mlt_w < $mlt_h ? $mlt_w:$mlt_h;
// opretter et tomt billede $img_resized = imagecreatetruecolor($img_new_width, $img_new_height);
// indsætter resized billede i det tomme // De første 2 parameter er det tomme billede og billed data der skal resizes // De næste 4 parameter er 0, men kan bruges til displace // De sidste 4 paramter er den nye højre og bredde og den orginale højre og bredde imagecopyresized($img_resized, ImageCreateFromJpeg($_FILES['strFile']['tmp_name']), 0 , 0 , 0 , 0, $img_new_width, $img_new_height, $img_orig_width, $img_orig_height);
// for at holde propertionerne fra det orginale billed // regnes en ratio ud $mlt_w = $IMG_TN_WIDTH / $img_orig_width; $mlt_h = $IMG_TN_HEIGHT / $img_orig_height; $mlt = $mlt_w < $mlt_h ? $mlt_w:$mlt_h;
// opretter et tomt billede $img_resized = imagecreatetruecolor($img_new_width, $img_new_height);
// indsætter resized billede i det tomme // De første 2 parameter er det tomme billede og billed data der skal resizes // De næste 4 parameter er 0, men kan bruges til displace // De sidste 4 paramter er den nye højre og bredde og den orginale højre og bredde imagecopyresized($img_resized, ImageCreateFromJpeg($_FILES['strFile']['tmp_name']), 0 , 0 , 0 , 0, $img_new_width, $img_new_height, $img_orig_width, $img_orig_height);
// Filnavnet bliver tn_id.jpg $img_name = "tn_$image_stored"; Imagejpeg($img_resized, "$IMG_ROOT/$img_name");
// Skriver information på skræmen echo "<b>Thumbnail</b><br> Max størrelse for thumbnails: $IMG_TN_WIDTH x $IMG_TN_HEIGHT<br> Width: $img_new_width<br> Height: $img_new_height<br> Filstørrelse: $mg_new_size (in bytes)<br> <img src='$IMG_ROOT/$img_name'><br><br>"; } }
Du er nødt til at bruge is_uploaded_file for at finde ud af om der er uploadet en fil. Hvis der er det, skal du bruge move_uploaded_file og flytte den et andet sted hen, før du kan tilgå den med getimagesize() osv.
Har du sat permissions op på upload-mappen på serveren (altså selve mappen)? Du kan ikke selv ændre det via php (inden upload), grundet safemode. Efter hvad jeg husker, benyttes der 2 forskellige brugere på serveren, så der skal være sat 0777 på mappen (f.eks. /images/)
Hej Folkens. tak for jeres svar indtil videre. til stingbat: jeg har sat alle filer og mapper relateret til billeder til 777 via ftp'en. kan man ændre permissions andre steder? Coderdk: har du mulighed for at skrive de linjer kode som du mener der mangler i ovenstående script? hvis det kommer til at virke er der point til dig. Rasmus-madsen: jeg synes ikke jeg kan finde den linje kode som du mener der skal ændres i ovenstående script?
Hvis du har ændret permissions, så burde det også gerne virke. Har selv haft fået det til at virke på surftown på et tidspunkt, så kan ikke lige huske 100% om der var andet der lige skulle gøres :) Men rod-billed-mappen havde du ligeledes sat permissions på?!
Blev mappen forresten lavet via FTP eller med dit script? (lagde lige mærke til at du havde det med i scriptet)
// Tjekker om den valgte fil er blandt accepteret typer if(!in_array($_FILES['strFile']['type'], $acceptedTypes) OR trim($_FILES['strFile']['tmp_name']) == "" OR trim($_FILES['strFile']['tmp_name']) =="none") { echo "Billed er ikke supportet. Tjek at det er jpeg format"; } else { // undersøger om det er main eller extra // og tildeler filnavn derefter.
// Flyt fil så vi kan arbejde med den - SAFE_MODE fix $tmpfile = tempnam($IMG_ROOT, 'upl_tmp_'); if ( move_uploaded_file( $_FILES['strFile']['tmp_name'], $tmpfile ) ) { // De orginale størrelser på filen hentes $img_orig_size = getimagesize($tmpfile); $img_orig_width = $img_orig_size[0]; $img_orig_height = $img_orig_size[1];
// Gemmer billede med nye størrelser som stort $img_original = ImageCreateFromJpeg($tmpfile);
// Tjekker om billede er mindre en max størrelserne if(($img_orig_width <= $IMG_BIG_WIDTH) AND ($img_orig_height <= $IMG_BIG_HEIGHT)) { echo "gemt - billed ikke resized<br>"; ImageJPEG($img_original, "$IMG_ROOT/$image_stored"); } else { echo "gemt - fuld størrelse<br>"; // Gemmer original billed i fuldstørrelse ImageJPEG($img_original, "$IMG_ROOT/big_$image_stored");
// Skriver information på skræmen echo "<b>Thumbnail</b><br> Max størrelse for thumbnails: $IMG_TN_WIDTH x $IMG_TN_HEIGHT<br> Width: $img_new_width<br> Height: $img_new_height<br> Filstørrelse: $mg_new_size (in bytes)<br> <img src='$IMG_ROOT/$img_name'><br><br>"; } }
coderdk: er det script som du skrev klar til indrykning eller skal jeg rette if($submit) til if(isset( $_POST['submit'] ) ) som du har skrevet nedenfor?
coderdk: jeg har lige forsøgt at lægge dit script ind med rettelser men der kommer en syntax erroe på linje 242. Hvis jeg presser dig kan jeg så få dig til at sende eller vise mig hele scriptet. Altså nøjagtig som den skal se ud fra start til slut?
Coderdk: jeg prøvede at fjerne en { på linje 242 og kom forbi syntax fejlen, men efter billedet er hentet kommer der en 404 fejlside... jeg er desværre ikke selv i stand til at finde fejlen :-/ ser frem til at høre fra dig.
// Tjekker om den valgte fil er blandt accepteret typer if(!in_array($_FILES['strFile']['type'], $acceptedTypes) OR trim($_FILES['strFile']['tmp_name']) == "" OR trim($_FILES['strFile']['tmp_name']) =="none") { echo "Billed er ikke supportet. Tjek at det er jpeg format"; } else { // undersøger om det er main eller extra // og tildeler filnavn derefter.
// Flyt fil så vi kan arbejde med den - SAFE_MODE fix $tmpfile = tempnam($IMG_ROOT, 'upl_tmp_'); if ( move_uploaded_file( $_FILES['strFile']['tmp_name'], $tmpfile ) ) { // De orginale størrelser på filen hentes $img_orig_size = getimagesize($tmpfile); $img_orig_width = $img_orig_size[0]; $img_orig_height = $img_orig_size[1];
// Gemmer billede med nye størrelser som stort $img_original = ImageCreateFromJpeg($tmpfile);
// Tjekker om billede er mindre en max størrelserne if(($img_orig_width <= $IMG_BIG_WIDTH) AND ($img_orig_height <= $IMG_BIG_HEIGHT)) { echo "gemt - billed ikke resized<br>"; ImageJPEG($img_original, "$IMG_ROOT/$image_stored"); chmod("$IMG_ROOT/$image_stored",0777); } else { echo "gemt - fuld størrelse<br>"; // Gemmer original billed i fuldstørrelse ImageJPEG($img_original, "$IMG_ROOT/big_$image_stored"); chmod("$IMG_ROOT/big_$image_stored",0777);
// Skriver information på skræmen echo "<b>Thumbnail</b><br> Max størrelse for thumbnails: $IMG_TN_WIDTH x $IMG_TN_HEIGHT<br> Width: $img_new_width<br> Height: $img_new_height<br> Filstørrelse: $mg_new_size (in bytes)<br> <img src='$IMG_ROOT/$img_name'><br><br>"; } }
coderdk: jeg er ked af det men jeg har netop prøvet at kopiere din kode ind i scriptet, og desværre så bliver der ikke vist nogle billeder. I interfacen vælger man hvilket produkt som billedet skal tilføjes til, og når det er gjort og billedet uploaded, sendes man retur til interfacens forside og der er intet billede på produktet.... sig til hvis du har brug for yderligere oplysninger eller lign. håber virkelig det kan komme til at virke ;-)
// Tjekker om den valgte fil er blandt accepteret typer if(!in_array($_FILES['strFile']['type'], $acceptedTypes) OR trim($_FILES['strFile']['tmp_name']) == "" OR trim($_FILES['strFile']['tmp_name']) =="none") { echo "Billed er ikke supportet. Tjek at det er jpeg format"; } else { // undersøger om det er main eller extra // og tildeler filnavn derefter.
// Flyt fil så vi kan arbejde med den - SAFE_MODE fix $tmpfile = tempnam($IMG_ROOT, 'upl_tmp_'); if ( move_uploaded_file( $_FILES['strFile']['tmp_name'], $tmpfile ) ) { // De orginale størrelser på filen hentes $img_orig_size = getimagesize($tmpfile); $img_orig_width = $img_orig_size[0]; $img_orig_height = $img_orig_size[1];
// Gemmer billede med nye størrelser som stort $img_original = ImageCreateFromJpeg($tmpfile);
// Tjekker om billede er mindre en max størrelserne if(($img_orig_width <= $IMG_BIG_WIDTH) AND ($img_orig_height <= $IMG_BIG_HEIGHT)) { echo "gemt - billed ikke resized<br>"; ImageJPEG($img_original, "$IMG_ROOT/$image_stored"); chmod("$IMG_ROOT/$image_stored",0777); } else { echo "gemt - fuld størrelse<br>"; // Gemmer original billed i fuldstørrelse ImageJPEG($img_original, "$IMG_ROOT/big_$image_stored"); chmod("$IMG_ROOT/big_$image_stored",0777);
// Skriver information på skræmen echo "<b>Thumbnail</b><br> Max størrelse for thumbnails: $IMG_TN_WIDTH x $IMG_TN_HEIGHT<br> Width: $img_new_width<br> Height: $img_new_height<br> Filstørrelse: $mg_new_size (in bytes)<br> <img src='$IMG_ROOT/$img_name'><br><br>"; } }
// Tjekker om den valgte fil er blandt accepteret typer if(!in_array($_FILES['strFile']['type'], $acceptedTypes) OR trim($_FILES['strFile']['tmp_name']) == "" OR trim($_FILES['strFile']['tmp_name']) =="none") { echo "Billed er ikke supportet. Tjek at det er jpeg format"; } else { // undersøger om det er main eller extra // og tildeler filnavn derefter.
// Flyt fil så vi kan arbejde med den - SAFE_MODE fix $tmpfile = tempnam($IMG_ROOT, 'upl_tmp_'); if ( move_uploaded_file( $_FILES['strFile']['tmp_name'], $tmpfile ) ) { // De orginale størrelser på filen hentes $img_orig_size = getimagesize($tmpfile); $img_orig_width = $img_orig_size[0]; $img_orig_height = $img_orig_size[1];
// Gemmer billede med nye størrelser som stort $img_original = ImageCreateFromJpeg($tmpfile);
// Tjekker om billede er mindre en max størrelserne if(($img_orig_width <= $IMG_BIG_WIDTH) AND ($img_orig_height <= $IMG_BIG_HEIGHT)) { echo "gemt - billed ikke resized<br>"; ImageJPEG($img_original, "$IMG_ROOT/$image_stored"); chmod("$IMG_ROOT/$image_stored",0777); } else { echo "gemt - fuld størrelse<br>"; // Gemmer original billed i fuldstørrelse ImageJPEG($img_original, "$IMG_ROOT/big_$image_stored"); chmod("$IMG_ROOT/big_$image_stored",0777);
// Skriver information på skræmen echo "<b>Thumbnail</b><br> Max størrelse for thumbnails: $IMG_TN_WIDTH x $IMG_TN_HEIGHT<br> Width: $img_new_width<br> Height: $img_new_height<br> Filstørrelse: $mg_new_size (in bytes)<br> <img src='$IMG_ROOT/$img_name'><br><br>"; } }
elseif(isset($_REQUEST['submit_sub_fetch']) AND !isset($_REQUEST['submit_sub_choose']) AND !isset($_REQUEST['submit']) AND !isset($_REQUEST['browse'])) { ?>
elseif(isset($_REQUEST['submit_sub_choose']) AND !isset($_REQUEST['submit_sub_fetch']) AND !isset($_REQUEST['submit']) AND !isset($_REQUEST['browse'])) {
ja det kan jeg godt give dig ret i. Jeg tror dog du har fat i det rigtige, men der er blot lige nogle bugs før jeg kan komme til at se om det faktisk virker det du har lavet. lige nu kan scriptet ikke finde de produktundergrupper som ligger i databasen...så jeg kan slet ikke komme til at vælge et produkt der skal have tilføjet et billede..i scriptet skal man først vælge kategori, underkategori og så produkt, før man kan tilføje nyt hovedbillede, ekstrabillede, eller slette billede. Er det en fejl du let kan rette? tak for din indsats indtil videre iøvrigt :-)
Coderdk: ham der normalt laver mit kodeværk siger at der er et problem i scriptet som han ikke kan løse...det drejer sig om at 'filen ikke kan læses'. Den del som tjekker om filen eksisterer, bliver ikke kørt. jeg håber jeg kan få dig til at bruge 3 sek. til på min hovedpine :-) Scriptet kommer her:
// Tjekker om den valgte fil er blandt accepteret typer if(!in_array($_FILES['strFile']['type'], $acceptedTypes) OR trim($_FILES['strFile']['tmp_name']) == "" OR trim($_FILES['strFile']['tmp_name']) =="none") { echo "Billed er ikke supportet. Tjek at det er jpeg format"; } else { // undersøger om det er main eller extra // og tildeler filnavn derefter.
// Flyt fil så vi kan arbejde med den - SAFE_MODE fix $tmpfile = tempnam($IMG_ROOT, 'upl_tmp_'); if(move_uploaded_file($_FILES['strFile']['tmp_name'], $tmpfile)) { echo "hvis upped fil fundet<br>"; // De orginale størrelser på filen hentes $img_orig_size = getimagesize($tmpfile); $img_orig_width = $img_orig_size[0]; $img_orig_height = $img_orig_size[1];
// Gemmer billede med nye størrelser som stort $img_original = ImageCreateFromJpeg($tmpfile);
// Tjekker om billede er mindre en max størrelserne if(($img_orig_width <= $IMG_BIG_WIDTH) AND ($img_orig_height <= $IMG_BIG_HEIGHT)) { echo "gemt - billed ikke resized<br>"; ImageJPEG($img_original, "$IMG_ROOT/$image_stored"); chmod("$IMG_ROOT/$image_stored",0777); } else { echo "gemt - fuld størrelse<br>"; // Gemmer original billed i fuldstørrelse ImageJPEG($img_original, "$IMG_ROOT/big_$image_stored"); chmod("$IMG_ROOT/big_$image_stored",0777);
// Skriver information på skræmen echo "<b>Thumbnail</b><br> Max størrelse for thumbnails: $IMG_TN_WIDTH x $IMG_TN_HEIGHT<br> Width: $img_new_width<br> Height: $img_new_height<br> Filstørrelse: $mg_new_size (in bytes)<br> <img src='$IMG_ROOT/$img_name'><br><br>"; } }
elseif(isset($_REQUEST['submit_sub_fetch']) AND !isset($_REQUEST['submit_sub_choose']) AND !isset($_REQUEST['submit']) AND !isset($_REQUEST['browse'])) { ?>
elseif(isset($_REQUEST['submit_sub_choose']) AND !isset($_REQUEST['submit_sub_fetch']) AND !isset($_REQUEST['submit']) AND !isset($_REQUEST['browse'])) {
// Flyt fil så vi kan arbejde med den - SAFE_MODE fix $tmpfile = tempnam($IMG_ROOT, 'upl_tmp_'); if(move_uploaded_file($_FILES['strFile']['tmp_name'], $tmpfile))
// Flyt fil så vi kan arbejde med den - SAFE_MODE fix $tmpfile = tempnam($IMG_ROOT, 'upl_tmp_'); echo "\$tmpfile = $tmpfile"; if(move_uploaded_file($_FILES['strFile']['tmp_name'], $tmpfile)) { echo "hvis upped fil fundet<br>";
Giver
$tmpfile = ../shop/pics/001086/upl_tmp_ANQaid
dvs if'en bliver ikke kørt da echo "hvis upped fil fundet<br>"; ikke bliver udført
hmm.. der må være noget med det der $tmpfile = tempnam($IMG_ROOT, 'upl_tmp_');
jeg skal spørge hvad tempnam er og hvad upl_tmp_ er...
fordi..
$tmpfile = ../shop/pics/001086/upl_tmp_ANQaid
burde måske $tmpfile = ../shop/pics/001086/upl_tmp_/ANQaid (altså med /)
Hmm underligt - Gad vide hvorfor den ikke vil flytte filen så...
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.