Avatar billede encorez Nybegynder
15. juli 2003 - 16:01 Der er 20 kommentarer og
1 løsning

fil-attributter

en bruger skal kunne oprette en fil. Derefter skal brugeren vha. nogle funktioner kunne skrive forskellige ting til denne fil. Problemet er at når filen bliver lavet kan jeg ikke cmod kode højere end 644. Så jeg kan ikke få adgang til den efter den er lavet. Jeg bruger følgende kode:

$pflag = 0;

$fp = @fopen($filepath,"w");
if (!is_writeable($filepath))  $pflag =1;
if ($pflag ==1){
@chmod($filepath, 0777);
}
@flock($fp,2);
Her efter begynder jeg at skrive til filen.

Som I kan se forsøger jeg at ændre filens attributter til 777, men det kan jeg ikke få til at lykkes.

Jeg får følgende fejl når jeg bagefter forsøger at få adgang til filen:
-main(): SAFE MODE Restriction in effect. The script whose uid is 15001 is not allowed to access blabla.php owned by uid 57878
-failed to open stream: Permission denied

Jeg har læst et sted om at der er problemer med dette, men jeg håber nogen kan give mig en løsning på det. Hvis man ikke kan få adgang til de filer man laver, så mener jeg nærmest det er nytteløst at lave filerne!!

Simon
Avatar billede raz0 Nybegynder
15. juli 2003 - 16:32 #1
Du skal sætte en anden umask.
Et eksempel:

<?php

$gammel_umask = umask(000);
mkdir("ny_mappe", 0777);
umask($gammel_umask);

?>

Læs eventuelt www.php.net/umask :)
Avatar billede encorez Nybegynder
15. juli 2003 - 16:33 #2
jeg vil prøve. Nu er det dog filer jeg har problemer med og ikke biblioteker. Men istedet for mkdir, så skal jeg vel bare bruge fopen
Avatar billede encorez Nybegynder
15. juli 2003 - 16:35 #3
eller misforstod jeg. Hvad gør "mkdir("ny_mappe", 0777);" helt præcist
Avatar billede raz0 Nybegynder
15. juli 2003 - 16:35 #4
Jep, det er rigtigt :) En umask gør bare så man IKKE kan sætte permissions til f.eks. 777. Du skal bare bruge chmod() istedet for mkdir().
Avatar billede raz0 Nybegynder
15. juli 2003 - 16:37 #5
mkdir("ny_mappe", 0777); laver en ny mappe der hedder 'ny_mappe' som har permissions sat til 777.
Avatar billede encorez Nybegynder
15. juli 2003 - 16:38 #6
ja, det kunne jeg godt regne ud. Jeg mente mere hvad den gør i forhold til det jeg skal bruge.

Når jeg ser nærmere efter, hvad gør så den første og den sidste linie med umask. Umiddelbart har de jo ikke kontakt med den fil jeg skal bruge
Avatar billede raz0 Nybegynder
15. juli 2003 - 16:45 #7
Altså.. en umask er en slags indstilling der gør at man f.eks. IKKE kan chmod'e til 777. Hvis ens umask er sat til f.eks. 022 (altså umask(022);) så kan man højest chmod'e filer og biblioteker til 755. Meget groft sagt kan man sige at man trækker umask'en fra, selvom det ikke helt passer i praksis. Når en umask er sat, virker den på ALLE filer og mapper der bliver chmod'ed og derfor skal den ikke have nogen 'direkte' kontakt med filen/mappen.
Avatar billede encorez Nybegynder
15. juli 2003 - 16:47 #8
nu kan jeg ændre den til 777, men jeg får stadig de fejl jeg skrev. Jeg tror det har noget at gøre med ejerskab af filen. Siger det dig noget?
Avatar billede encorez Nybegynder
15. juli 2003 - 16:50 #9
jeg forstår det ikke, jeg kan ændre attributterne til 777 nu uden at brugeumask. Eller er det fordi, det virker hele tiden, når først den er blevet brugt én gang?
Avatar billede raz0 Nybegynder
15. juli 2003 - 16:51 #10
Har du prøvet at slette filen og lade scriptet lave filen selv igen? PHP er en bitch når man roder med filsystem funktionerne når der er safe_mode på. Tro mig, jeg kender det. Jeg har selv lavet en filmanager. :/ http://phpfm.zalon.dk/
Avatar billede encorez Nybegynder
15. juli 2003 - 16:52 #11
det er præcis jeg gør, altså laver scriptet lave filen selv. Hvordan har du så løst det problem med ejerskabet
Avatar billede raz0 Nybegynder
15. juli 2003 - 16:59 #12
Altså, hvis du kører scriptet på en *nix server, skal du lige vide at chmod KUN virker hvis man er root. Problemet er at Apache normalt kører som 'nobody'.

Du kan prøve følgende script jeg lige har bikset sammen (ikke testet selvfølgelig  :) )

<?php

$fp = fopen("./fil.txt", "w+");
fclose($fp);

$fp = fopen("./fil.txt", "wb");
fwrite($fp, "Dette er en test\nTest!");
fclose($fp);

?>
Avatar billede encorez Nybegynder
15. juli 2003 - 17:03 #13
umiddelbart virker det ikke. Du glemte vel at jeg skal bruge cmod et sted i det script. Ellers bliver rettighederne sat til 644. Jeg har prøvet at sætte cmod ind mellem de første 2 linie i dit script
Avatar billede raz0 Nybegynder
15. juli 2003 - 17:09 #14
Hmm, mærkeligt. Det virker fint her. Den laver filen osv., men permissions bliver selvfølgelig ikke sat til 777. Er det vigtigt den bliver sat til 777? Umidelbart er der ingen måde at chmod'e en fil til 777 hvis man ikke er root når safe_mode er slået til i PHP.
Avatar billede encorez Nybegynder
15. juli 2003 - 17:38 #15
når du siger det virker fint, vil det så sige at du også kan få adgang til den, f.eks. via internettet?
Jeg har ikke noget problem med cmod'e den til 777, men det er først blevet muligt efter jeg har brugt umask
Avatar billede raz0 Nybegynder
15. juli 2003 - 17:57 #16
Avatar billede encorez Nybegynder
15. juli 2003 - 21:29 #17
det script virker også ved mig. Jeg skal have kigget dit script efter i sømmene og fundet ud af hvad jeg gør anderledes. Ind til da, tak for hjælpen
Avatar billede raz0 Nybegynder
15. juli 2003 - 21:44 #18
Var så lidt, og tak for pointene :)
Avatar billede encorez Nybegynder
15. juli 2003 - 23:12 #19
jeg har nu kigget lidt på det og det ser ud til at jeg faktisk ikke får de fejlmeddelser fordi jeg ikke kan få adgang til filen. Jeg får dem, fordi jeg i starten af filen includeer nogle filer fra et andet bibliotek. De filer er ikke blevet oprettet af scriptet.

Har du nogen ide om hvorfor den nye fil ikke vil tillade at en fil fra et andet bibliotek bliver included?
Avatar billede encorez Nybegynder
15. juli 2003 - 23:16 #20
Jeg tror den fejl fortæller at det netop har noget at gøre med hvem der er "owner" på de enkelte filer:
SAFE MODE Restriction in effect. The script whose uid is 15001 is not allowed to access ./function/db-connect.php owned by uid 57878
Avatar billede encorez Nybegynder
16. juli 2003 - 10:17 #21
raz0 -> hvis du har lyst til en udfordring, så prøv at oprette en fil (selv) f.eks. via ftp. Så prøv at skriv en indclude-linie ind i den fil du opretter via scriptet og så se om den vil include det der kommer fra den fil du selv oprettet.
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