[ kazil @ 17.08.2009. 15:41 ] @
Eo, nesto se igram sa mkdir-om, pa kanda ima neki mali feature (it's not a bug, it's a feature!) :D Elem: Code: mkdir('/path/to/folder', 0775); Daje folder sa permisijama 0755, a ne sa 0775 kao sto sam mu i rekao. OK, postoji umask(). Defaultni umask() je 0022, sto je dobro. Ako uradim sledece: Code: umask(0002); mkdir('/path/to/folder', 0775); Daje folder sa permisijama 0775, kao sto sam i zeleo prvi put :) Logicno objasnjenje je da mkdir() ne uzima u obzir mod koji mu prosledjujem i koristi defaultni (defaultni, po dokumentaciji je 0777, a isti je defaultni i za bilo koji *nix sistem, ako sysadmin nije promenio - a nisam :P). Koliko sam skontao, sa umaskom se radi na sledeci nacin: od prvobitne permisije se oduzima vrednost umaska. U slucaju ako je mod 777, umask = 22: 777-22 = 755. Mod 775, umask 22: 775-22 = 753. Kako se jos moze izracunati? Bitovima (ovo sam nasao u PHP manualu, dole u komentarima http://www.php.net/manual/en/function.umask.php). umask se prebaci u bitove, invertuje i odradi AND funkcija nad pocetnim modom i invertovanim umaskom. Mod: 777, 111111111 Umask: 22, 000010010 Invertovani umask: 111101101 Rezultat nakon AND: 111101101, tj. 755. Ovo je OK. Mod: 777, 111111111 Umask: 2, 000000010 Invertovani umask: 111111101 Rezultat nakon AND: 111111101, tj. 775. Ovo je OK. Mod: 775, 111111101 Umask: 22, 000010010 Invertovani umask: 111101101 Rezultat nakon AND: 111101101, tj. 755. WTF?! Ovo bi trebalo da bude 753, ako pogledamo da je 775-22 = 753 Moguce je da je ovo racunanje sa bitovima pogresno, da se ne racuna tako, ne znam. U svakom slucaju, nesto se zanimljivo desava, bar po meni :) I da, testirano na dva posebna servera, koji imaju drugacije setupove i drugacije verzije OS-a i PHP-a, a opet, isto se ponasaju :) Any ideas? :) |