Avatar billede brinck10 Nybegynder
24. februar 2009 - 17:36 Der er 18 kommentarer og
1 løsning

Chmod PHP problem

Hej Eksperter.

Er nu ved at være godt kørt fast i den samme smøre. Jeg vil gerne oprette en mappe, og chmodde den til 777. Problemet er, at mappen altid får moddingen 411.

Min kode er som følger:

$query=mysql_query("SELECT * FROM System_pages WHERE gallery IS NOT NULL");
                        if(@mkdir("./../gallery/content/".$_POST["get_write_name"]."/",777)){
                            if(@chmod("./../gallery/content/".$_POST["get_write_name"]."/",777)!==TRUE){
                                get_board("Response","An error occured while chmodding.");
                                exit;
                            }
                            while($p=mysql_fetch_assoc($query)){
                               
                                if($galdir=@mkdir("./../gallery/content/".$p["name"]."/Galleries/",777)){
                                    if($galdir=@mkdir("./../gallery/content/".$p["name"]."/Galleries/".$_POST["get_write_name"]."/",777)){
                                        if(!$folderdata=@fopen($galdir."folderdata.xml","w")){
                                            get_board("Response","An error occured while creating the folderdata.xml.");
                                            exit;
                                        }
                                        if(fwrite($folderdata,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<folder fileCount=\"0\" title=\"".$_POST["get_write_name"]."\" previewimage=\"\" description=\"Click here to jump to the gallery "".$_POST["get_write_name"]."\" pageContent=\"http://sjfoto.dk/galleri/?contentfolder=/content/".$_POST["get_write_name"]."/\" sort=\"auto\" hidden=\"\" page=\"link\" fileMod=\"\" parameters=\"\"/>")===FALSE){
                                            get_board("Response","An error occured while writing the folderdata.xml.");
                                            exit;
                                        }
                                        fclose($folderdata);
                                    }else{
                                        get_board("Response","An error occured while creating the ../gallery/content/".$p["name"]."/Galleries/".$_POST["get_write_name"]."/ dir.");
                                        exit;
                                    }
                                }else{
                                    get_board("Response","An error occured while creating the ../gallery/content/".$p["name"]."/Galleries/ dir.");
                                    exit;
                                }
                            }
                            get_board("Response","The gallery was succesfully written.");
                        }

Underligt nok så opretter scriptet den første mappe, men ligeså snart den skal oprette "Galleries"-mappen, så kan den ikke, da den første mappe som sagt for en chmod med 411.

Funktionen get_board($heading,$text), smider en besked tilbage til brugeren...

Håber i kan hjælpe mig.

Mvh. Frederik
Avatar billede jakobdo Ekspert
24. februar 2009 - 18:14 #1
Kan det ikke skyldes safe mode ?
Hvis det er tilfældet, så sker der følgende:

php opretter en mappe, men har ikke ejerskab over denne mappe, da det er web-serverens bruger som opretter den.
Og derfor kan du ikke få lov til at lave chmod() på mappen.
Du kan måske gøre det via ftp, men det er jo ikke en god løsning.
Avatar billede brinck10 Nybegynder
24. februar 2009 - 18:18 #2
Nej, jeg er rimelig sikker på at den er sat til OFF, da jeg har en galleri-applikation, der kan oprette mapper.

Her er en phpinfo: http://sjfoto.dk/dem/gallery/imagevue/index.php?c=diag&a=phpinfo
Avatar billede coderdk Praktikant
25. februar 2009 - 04:46 #3
Prøv i toppen af scriptet at skrive:

umask(0);
Avatar billede brinck10 Nybegynder
25. februar 2009 - 07:06 #4
Det hjalp ikke :-(.

Nogle andre idéer?
Avatar billede brinck10 Nybegynder
25. februar 2009 - 07:08 #5
Det skal lige siges, at scriptet stadig fejler det samme sted, nemlig på linjen:

if($galdir=@mkdir("./../gallery/content/".$p["name"]."/Galleries/",777)){

og hvorfor den gør det, er fordi den oprettede mappes permissions, bliver sat til 411.

Jeg har en anden applikation, som kan oprette mapper og sætte permissions rigtigt, så det burde kunne lade sig gøre.

-Undskyld dobbel tråd
Avatar billede jakobdo Ekspert
25. februar 2009 - 09:23 #6
Kan det skyldes du bruger ./../ i stien ?
Avatar billede brinck10 Nybegynder
25. februar 2009 - 13:47 #7
Nej, det gør ingen forskel; har for en sikkerhedsskyld tjekket.

Den 1. mappe bliver også stadig oprettet, men med de forkerte permissions :-(

Frederik
Avatar billede jakobdo Ekspert
25. februar 2009 - 16:08 #8
Hvis du bare laver:
mkdir('temp',0777);
Hvilke permissions for den mappe så ?
Avatar billede brinck10 Nybegynder
25. februar 2009 - 16:18 #9
:S, den får 777.
Avatar billede brinck10 Nybegynder
25. februar 2009 - 16:40 #10
Okay.

Har nu nærmet mig problemet lidt.

test.php ligger i mappen "adm", som har permissions sat til 777. Hver gang jeg opretter noget som ligger i en mappe(permissions:777) i "adm" mappen, får den oprettede mappen permissions 411. Det samme sker hvis jeg bevæger mig til undermapperne, dvs at jeg for eksempel prøver at oprette en mappe i den mappe som "adm" mappen ligger i.

Jeg kan kun oprette mapper med permissions til 777, hvis de ligger i samme mappe som filen selv.

Nogen idéer?
Avatar billede jakobdo Ekspert
25. februar 2009 - 17:32 #11
Ikke at jeg ved hvad jeg skal svare hvis du siger A eller B.
Men er det windows eller linux server ?
Avatar billede brinck10 Nybegynder
25. februar 2009 - 20:21 #12
Det er en linux server.
Avatar billede jakobdo Ekspert
25. februar 2009 - 20:27 #13


mkdir('temp',0777);
Virker fint.

Men mkdir('../andet',0777);
virker ikke ?

Mappen i niveauet over php scriptet, er den chmod'et med skriverettigheder ?
Avatar billede brinck10 Nybegynder
25. februar 2009 - 20:45 #14
Ja, det er den. Har dobbelt tjekket.

Det er korrekt:

mkdir('temp',777);
virker som det eneste.

mkdir('../temp',777); & mkdir('folder/temp',777);
virker ikke.
Avatar billede jakobdo Ekspert
25. februar 2009 - 20:52 #15
Hmm, det lyder mærkeligt.
Og jeg har desværre ikke flere input... Så vi må håbe der kommer et klogere hoved forbi din tråd.
Avatar billede tenzer Nybegynder
26. februar 2009 - 19:37 #16
Prøv at sætte et 0 foran tallene i dit chmod() kald, så det bliver '0777' i stedet for. chmod() skal have værdien i oktal værdi, som der også står på siden her: http://dk.php.net/chmod.
Avatar billede jakobdo Ekspert
26. februar 2009 - 21:42 #17
Virker:

mkdir('folder/temp',777,true);
eller
mkdir('folder/temp',0777,true);
Avatar billede brinck10 Nybegynder
27. februar 2009 - 13:46 #18
Det har løst problemet.

Tænk at et nul kan gøre en så stor forskel :-(.

Tusind tak tenzer, for dit svar. Du har fortjent pointene.

Tak for din tålmodighed jakobdo, hvis du føler dig snydt, er du mere end velkommen til at skrive til mig, så opretter jeg en point-tråd til dig!

Frederik
Avatar billede jakobdo Ekspert
01. marts 2009 - 10:25 #19
Det er helt ok.
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