Avatar billede ellert Nybegynder
26. maj 2006 - 14:06 Der er 13 kommentarer og
1 løsning

Problemer med content type: image/jpeg

Hej!

Jeg har lavet et lille script til at vise et tilfældigt billede fra en mappe. Men jeg har problemer, når den tilfældige filer jpg - gif og png er fine...

Scriptet er her http://detersmart.dk/myspace/bg.php
(Koden kan ses her http://detersmart.dk/myspace/bg.phps)

Hvad kan problemet være?

På forhånd tusind tak for hjælpen! :)

// MikkelM
Avatar billede ellert Nybegynder
26. maj 2006 - 16:48 #1
Ingen der har en ide? :/
Avatar billede jakobdo Ekspert
26. maj 2006 - 18:30 #2
Hvornår er det du oplever problemer?
Kan det være et billede som ikke giver korrekt mine type?
Avatar billede ellert Nybegynder
26. maj 2006 - 18:52 #3
Hmm .. tja .. det kunne det vel godt være...

Jeg oplever problemer, når det tilfældige billede er et jpgbillede ... Så viser den ingenting. Jeg har prøvet med 2 forskellige jpgbilleder, som browseren godt vil vise, hvis det ikke er gennem scriptet her, men når det kommer i gennem maskinen her først, sker der ingenting.
Avatar billede jakobdo Ekspert
26. maj 2006 - 19:54 #4
Prøv at erstat disse linier:
// Getting the mime-type
if ( ! function_exists ( 'mime_content_type ' ) )
{
    // This function is thanks to "sven at frontmedia dot it" on php.net
    function mime_content_type ( $f )
    {
        return system ( trim( 'file -bi ' . escapeshellarg ( $f ) ) ) ;
    }
}
$mime = mime_content_type($final_file);
       
// --- FINALLY Outputting
//print $final_file." --- ".$ext;
header('Content-type: '.$mime);
include($img_folder."/".$final_file);

med:
$filename = basename($final_file);
$file_extension = strtolower(end(explode(".",$filename)));

//This will set the Content-Type to the appropriate setting for the file
switch($file_extension)
{
    case "gif": $ctype="image/gif"; break;
    case "png": $ctype="image/png"; break;
    case "jpeg":
    case "jpg": $ctype="image/jpg"; break;
    default: echo "ERROR"; exit(); break;
}

//Begin writing headers
//Use the switch-generated Content-Type
header("Content-Type: $ctype");
include($img_folder."/".$final_file);
Avatar billede ellert Nybegynder
26. maj 2006 - 20:15 #5
Hmm ... Det virker heller ikke... Eneste output jeg får ved at køre scriptet, er scriptets egen adresse...
Avatar billede jakobdo Ekspert
26. maj 2006 - 20:19 #6
Scriptets egen adresse?
Det skulle jo ikke gøre meget andet end at sætte content-type og vise filen.
Avatar billede ellert Nybegynder
26. maj 2006 - 20:32 #7
Præcis ...

http://detersmart.dk/myspace/bg.php prøv at køre det et par gange ... Så skulle det gerne dukke op
Avatar billede ellert Nybegynder
26. maj 2006 - 20:33 #8
I mappen er 4 gif'er, 1 png og 5 jpg'er
Avatar billede jakobdo Ekspert
26. maj 2006 - 20:43 #9
Det kan jeg godt se!
Prøv at skriv nogle info ud om filen!
Debug koden igennem.
echo "Nu er vi her<br />";

echo "Nu er vi her...<br />";

osv...
Så kan du måske se hvor i koden det fejler.
Avatar billede ellert Nybegynder
26. maj 2006 - 20:47 #10
Hmm.. Det har jeg gjort undervejs (mine php skills er lidt rustne :)
... og scriptet virker jo fint med gif'er og png'er ... Det kan kun være fordi, jpg laver rod i den... Kan det have noget med min hosts opsætning at gøre? Måske?
Avatar billede jakobdo Ekspert
26. maj 2006 - 20:53 #11
Det burde det altså ikke have!
header() og content-type er kun til at fortælle browseren hvilken fil du giver den.

Prøv evt. lige at fang mig på msn: jakobdo (at) hotmail {indsæt . her) com
Avatar billede jakobdo Ekspert
26. maj 2006 - 21:23 #12
Tricket var readfile() og ikke include() :o)
Og et svar.
Avatar billede ellert Nybegynder
26. maj 2006 - 21:25 #13
Tusind tak,jakobdo!

Her er koden:

<?php

// --- Configuring the script
$img_folder = "patterns"; // the folder where the gifs are located
   
$images = glob($img_folder . "/{*.gif,*.jpg,*.jpeg,*.png}", GLOB_BRACE);

// --- Getting a random pic
// Counting the files
$count = count($images);

// Getting a random number
$rand = rand(0, $count-1);
$final_file = $images[$rand];

// Getting the mime-type
$filename = basename($final_file);
$file_extension = strtolower(end(explode(".",$filename)));

//This will set the Content-Type to the appropriate setting for the file
switch($file_extension)
{
    case "gif": $ctype="image/gif"; break;
    case "png": $ctype="image/png"; break;
    case "jpeg":
    case "jpg": $ctype="image/jpeg"; break;
    default: echo "ERROR"; exit(); break;
}

//Begin writing headers
//Use the switch-generated Content-Type
header("Content-Type: $ctype");
@readfile($final_file); //ikke include()

?>
Avatar billede jakobdo Ekspert
26. maj 2006 - 21:29 #14
Takker for point.
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