Avatar billede nightowl24 Nybegynder
18. maj 2009 - 13:35 Der er 13 kommentarer

Problem med readfile på ny server

Hej

Jeg er igang med at flytte en php løsning fra én server til en anden. Jeg har ikke selv programmeret løsningen, men jeg har et problem med en readfile funktion som ikke virker på den nye server.

Koden ser således ud:

Header("Content-Type: image/jpeg");

Header("Cache-Control:");

Header("Pragma:");

readfile("sti_til_fil");

exit;

Når man kalder php filen med dette script vises et billede. Men på den nye server vises blot samme sti som man har indtastet i browserens adressevindue. Ved udkommentering af readfile funktionen sker der ingen ændring, så det antages at readfile slet ikke virker på den nye server.

Nogen gode ideer?
Avatar billede tfswebguy Nybegynder
18. maj 2009 - 14:11 #1
hmm, skal bruge noget mere kode, og vide hvordan stien ser ud. Før det er der ikke meget hjælp at hente
Avatar billede nightowl24 Nybegynder
18. maj 2009 - 14:30 #2
Ok

Stien til billedet ser således ud:

/var/www/vhosts/mitdomæne.dk/httpdocs/admin/files/180

Adressen i browseren ser således ud:

http://mitdomæne.dk/admin/file.php?/180/guides-ikon-forside.jpg

Der er nogle settings til database connection i toppen af php filen og så kommer følgende:

$parameter_array = explode("/", $REQUEST_URI);

if(count($parameter_array) > 2) {

    $file_id = $parameter_array[count($parameter_array)-2];

   

    $db = new DB_Sql;

   

    $db->Query("SELECT file_type.mime_type, file.id

        FROM file INNER JOIN file_type ON file.type_id = file_type.id

        WHERE file.id = $file_id");

   

    if($db->next_record()) {

        Header("Content-Type: ".$db->f(mime_type));

        Header("Cache-Control:");

        Header("Pragma:");

        readfile($Set_Upload_dir.$db->f(id));
       
        exit;

    }

    else {

        print("Ugyldig fil");

    }

}

else {

    print("Ugyldig antal parameter");

}
Avatar billede tfswebguy Nybegynder
18. maj 2009 - 14:34 #3
Prøv lige dette:


$parameter_array = explode("/", $REQUEST_URI);

Ret til:

$parameter_array = explode("/", $_SERVER['REQUEST_URI']);



Se om det hjælper?
Avatar billede nightowl24 Nybegynder
18. maj 2009 - 19:30 #4
Det gjorde desværre ingen forskel - det ser ud til der er givet de rigtige rettigheder til mappen med filerne, men kan det have noget med rettigheder at gøre?
Avatar billede showsource Seniormester
18. maj 2009 - 20:23 #5
Du kan jo prøve at starte med
ini_set('error_reporting', E_ALL);
som første linie i scriptet.
Avatar billede nightowl24 Nybegynder
18. maj 2009 - 20:54 #6
Ingen fejl bliver vist
Avatar billede showsource Seniormester
18. maj 2009 - 21:39 #7
Så prøv med
if(is_file($Set_Upload_dir.$db->f(id))
{
echo "OK";
}
else
{
echo "NIX! ".$Set_Upload_dir.$db->f(id);
}

i stedet for

readfile($Set_Upload_dir.$db->f(id));

Og hvis du hver gang bruger ?et eller andet, er det vel bedst med
$_SERVER["QUERY_STRING"]

Og hvad med
or die mysql_error() somewhere ?
Avatar billede nightowl24 Nybegynder
19. maj 2009 - 09:36 #8
Hej

Hvis jeg fjerner:

Header("Content-Type: image/jpeg");

Og indsætter din if else sætning, så får jeg et OK.
Avatar billede showsource Seniormester
19. maj 2009 - 15:57 #9
hmm, prøv med:

if(is_file($Set_Upload_dir.$db->f(id))
{
echo "OK";
    if(is_writ_able($Set_Upload_dir.$db->f(id))) {
    echo" og filen kan læses!";
    }
    else
    {
    echo" men tjek rettigheder!";
    }
}
else
{
echo "NIX! ".$Set_Upload_dir.$db->f(id);
}


Kunne godt lyde som rettigheder, som du selv er inde på tidligere.
Hvis du får "og filen kan godt læses!" så prøv at udkommentere de to headers du har, Cache-Control og Pragma
Avatar billede nightowl24 Nybegynder
19. maj 2009 - 16:18 #10
Jeg får "filen kan godt læses" og ingen ændring ved udkommentering af mine headers
Avatar billede showsource Seniormester
19. maj 2009 - 16:25 #11
hmm, nu var det is_readable jeg tænkte på, men mon ikke at det ville gi samme resultat !

Og med koden som er vist, er jeg ret blank.

file_get_contents() er iøvrigt vist nok den bedste måde ?
Avatar billede showsource Seniormester
19. maj 2009 - 16:29 #12
Og lige en note:
Husker ikke præcis hvad og hvordan, men lavede noget kode engang, som også brugte disksti, ( upload af fil til dir ), som virkede fint lokalt, samt på mit unixhost.
Men på server hvor script skulle ligge, virkede skidtet ikke!
Det virkede netop med file_get_contents() af tmp fil ved upload, og derefter gemme, men move_uploaded_file() virkede bare ikke.

Og det var p.g.a. stien som startede med $_SERVER["DOCUMENT_ROOT"] skulle tilføjes /var .....
Finder lige spm. jeg lavede dengang.
Avatar billede showsource Seniormester
19. maj 2009 - 16:30 #13
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