Tommy 碎碎念

Tommy Wu's blog

PHP chmod() 慘案
post by tommy @ 28 五月, 2008 09:56

話說前一陣子在 php 裡頭用到了 chmod 這個函式, 依據以往在 linux 下頭使用 chmod 指令的經驗, 加上使用 php 時, 並沒有做型別檢查的功能, 很自然的就會認為這個函式如同其他 php 的函式一般, 可以用數字也可以用字串來表示要更改的屬性. 而且, 的確在一開始的使用上, 做一些 o+w 或 o-w 之類的動作時, 都十分的正常, 一點都沒有懷疑這會有問題.

不過... 前幾天碰到了一個 g+s 的動作, 發現.... 一跑到這兒, 整個屬性反而被改成 000 了, 也就是被清空了. 這是怎麼回事呢?

想了很久, 也測了一些寫法, 最後, 終於在官方的 chmod 說明中看到, 這個 mode 參數, 只能是整數, 對於前述的字串參數來說, 是不對的. (說到這兒, 既然不允許, 是不是應該全部都失敗會比較好一些, 不要讓人誤以為可以使用, 結果... 只有某些情形下會不能用)

回頭把程式改了一下, 先取出屬性再做一堆 OR 運算, 自己弄出類似的結果, 然後再去把屬性改成自行運算後的結果, 這樣子果然就正常了. 有用到 chmod 的人, 自己注意一下吧.

Del.icio.us Furl HEMiDEMi Technorati MyShare
Bad Behavior 已經阻擋了 137 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS