Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zanimljivo ponasanje mkdir-a

[es] :: PHP :: Zanimljivo ponasanje mkdir-a

[ Pregleda: 2181 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

kazil
Robert Bašić
Full time PHP dev :)
Bačka Topola - Novi Sad

Član broj: 120044
Poruke: 686
*.ADSL.neobee.net.

Jabber: robertbasic@elitesecurity.org
ICQ: 446475288
Sajt: robertbasic.com


+2 Profil

icon Zanimljivo ponasanje mkdir-a17.08.2009. u 15:41 - pre 178 meseci
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? :)
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-1.sezampro.yu.



+33 Profil

icon Re: Zanimljivo ponasanje mkdir-a17.08.2009. u 15:55 - pre 178 meseci
Pa ne bih rekao da se računa po bitima, već po onom sistemu 1, 2, 4, ili kako se već to zove. Uglavnom, evo jedan primer:
Code:

mod:      0766   rwe.rw-.rw-
umask:    0022   ---.-w-.-w-
Rezultat: 0744   rwe.r--.r--

Otprilike poništavaju se ona podešavanja koja se poklapaju u modu i masci.

Ti brojevi 0xxx su u oktalnom sistemu, pa samim tim mogu da se pretvore i binarne brojeve, i onda može da ide binarno računanje.

[Ovu poruku je menjao Nikola Poša dana 17.08.2009. u 17:34 GMT+1]
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-1.sezampro.yu.



+33 Profil

icon Re: Zanimljivo ponasanje mkdir-a17.08.2009. u 16:40 - pre 178 meseci
btw Ne znam šta ti je čudno u tom tvom poslednjem primeru, oduzimanje dva oktalna broja nije ista operacija kao AND-ovanje binarnih, tako da nikako ne možeš da porediš 775 - 22 i 111111101 & 111101101.
 
Odgovor na temu

Miroslav Ćurčić
ex mVeliki
Novi Sad

Član broj: 19034
Poruke: 1118
195.252.92.*



+19 Profil

icon Re: Zanimljivo ponasanje mkdir-a17.08.2009. u 20:09 - pre 178 meseci
Nepotrebna komplikacija.

Jednostavno uradiš mkdir/chmod kombinaciju,
što je inače i prirodnije od umask/mkdir varijante.

A "jednačinu", neću ni da pokušavam da rešim, verovatno još jedna od mnogih brlja PHP tima.
"The quieter you become, the more you are able to hear."
Blog | PowerCMS
 
Odgovor na temu

kazil
Robert Bašić
Full time PHP dev :)
Bačka Topola - Novi Sad

Član broj: 120044
Poruke: 686
*.ADSL.neobee.net.

Jabber: robertbasic@elitesecurity.org
ICQ: 446475288
Sajt: robertbasic.com


+2 Profil

icon Re: Zanimljivo ponasanje mkdir-a18.08.2009. u 07:29 - pre 178 meseci
Shvatio sam na kraju :) samo treba malo mucnuti, jel :) a posle cu i da objasnim zasto me dovodilo do zabune.

Prvo: 777-22 = 755 je cista slucajnost :) 775-22 i JESTE 755 :D tj., ono racunanje sa bitovima je tacno :)

Cisto matematicko oduzimanje umaska od permisije je pogresno.

Code:

rwx.rwx.rwx
---.-w-.-w-
rwx.r-x.r-x


Ovo gore je OK.

Code:

rwx.rwx.r-x
---.-w-.-w-

Za ovo opet dobijamo rwx.r-x.r-x

Objasnjenje je prosto: dva ista se ponistavaju :)

A zasto je mene ovo zbunilo? Ae malo se bacimo u konzolu, shall we? :)

Generalni umask je isti kao i u PHP-u, 0022. Defaultna permisija za nove foldere je 0777, isto kao u PHP-u.

Code:

[robert@odin /usr/home/robert]$ mkdir test
[robert@odin /usr/home/robert]$ ls -l | grep test
drwxr-xr-x   2 robert  robert       512 Aug 18 08:24 test
[robert@odin /usr/home/robert]$ mkdir -m 775 test2
[robert@odin /usr/home/robert]$ ls -l | grep test
drwxr-xr-x   2 robert  robert       512 Aug 18 08:24 test
drwxrwxr-x   2 robert  robert       512 Aug 18 08:24 test2


Ocekivao sam da se PHPov mkdir ponasa isto kao i mkdir u konzoli: da ako eksplicitno navedem koja da bude permisija na novom folderu, da onda ta i bude, a ne da jos moram i racunati sa umaskom :)

Eto, sad makar imamo zapisano ako se jos nekom mkdir pocne cudno ponasati :)

Svako dobro :)
 
Odgovor na temu

bciric
Bojan Ciric
Pirot

Član broj: 89846
Poruke: 207
93.86.20.*

Sajt: www.cirasoft.co.cc


Profil

icon Re: Zanimljivo ponasanje mkdir-a19.08.2009. u 23:13 - pre 178 meseci
POkusao sam ovako

Code:
                $old = umask(0);
                mkdir('autori/'.$Nick, 0777);
                mkdir('autori/'.$Nick.'/slike_za_profil', 0777);


ali mi i dalje dozvole za novokreirane foldere budu na 755? neka druga ideja?
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Moderator
Član broj: 32202
Poruke: 4391
77.46.209.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Zanimljivo ponasanje mkdir-a20.08.2009. u 06:29 - pre 178 meseci
Jesi probao bez umask(), samo mkdir() pa chmod()?
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

bciric
Bojan Ciric
Pirot

Član broj: 89846
Poruke: 207
93.86.20.*

Sajt: www.cirasoft.co.cc


Profil

icon Re: Zanimljivo ponasanje mkdir-a20.08.2009. u 09:36 - pre 178 meseci
ne razumem te.

bilo je ovako
mkdir('autori/'.$Nick, 0777);
mkdir('autori/'.$Nick.'/slike_za_profil', 0777);

ali isti problem je bio pa sam onda ubacio umask(0) ali i dalje ne radi

 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Moderator
Član broj: 32202
Poruke: 4391
77.46.209.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Zanimljivo ponasanje mkdir-a20.08.2009. u 10:13 - pre 178 meseci
Mislio sam da probaš:

Code:
mkdir('autori/'.$Nick);
chmod('autori/'.$Nick, 0777);


A zašto pokušavaš da staviš chmod 777? Evo sad videh u manualu da je kod mkdir() default chmod 777 (osim ako admin servera to ne izmeni), a php će svakako moći da piše po direktorijumu koji je napravljen iz samog php-a.
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

bciric
Bojan Ciric
Pirot

Član broj: 89846
Poruke: 207
93.86.20.*

Sajt: www.cirasoft.co.cc


Profil

icon Re: Zanimljivo ponasanje mkdir-a20.08.2009. u 10:17 - pre 178 meseci
pokusacu i ovako. pa postavljam ga na 777 da bi mogo i preko ftp-a da pristupam i menjam sadrzaje

pokusacu ovo pa cu da javim kako ide.

hvala
 
Odgovor na temu

[es] :: PHP :: Zanimljivo ponasanje mkdir-a

[ Pregleda: 2181 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.